Se trata de un módulo clase para aplicar un corrector ortográfico a un TextBox o RichTextBox, esto lo hace mediante la interfaz SpellCheckerFactorys, ésta está disponible a partir de Windows 8 y posteriores.
Si bien con algunos controles como el InkEdit y los RichTextbox (Richedit50W), con sólo un par de líneas de códigos estos ya pueden aplicar el corrector ortográfico, pero en el caso de los TextBox (Edit) hay que hacer todo un trabajo como el que se realizó en el módulo clase para que funcione de la misma forma. Vale aclarar que en el caso de los RichTextBox cuando tiene formato, puede que el comportamiento no sea el deseado, ya que las líneas rojas de error pueden desfasarse un poco si la fuente cambia.
Como pueden ver en la imagen, en el menú contextual aplica las opciones de corrección y otras funcionalidades como: omitir, eliminar palabras, añadir al diccionario y auto corrección, este último es para cambiar la palabra automáticamente por otra a media que es detectada.
No requiere ninguna dependencia, sólo Windows 8 y posteriores.
Dear Leandro.
First, thank you very much for this code. It is amazing.
I found strange behavior in Sub DrawErrorMarks.
When the spelling error is in the last word, the wavy line drawing does not appear.
The fact is that PFC returns -1 as if the position is beyond the end of the text.
PFC = SendMessageW(mHwndEdit, EM_POSFROMCHAR, .lStart + .lLen, ByVal 0&)
I did this workaround
Dim sLastChar As String
…
nFontHeight = GetTextHeight(hDC, «Áj»)
lWidth = GetTextWidth(hDC, Right$(TextBox_GetText(mHwndEdit), 1))’save the width of the last char for later use
…
PFC = SendMessageW(mHwndEdit, EM_POSFROMCHAR, .lStart + .lLen, ByVal 0&)
If PFC = -1 Then
PFC = SendMessageW(mHwndEdit, EM_POSFROMCHAR, .lStart + .lLen – 1, ByVal 0&)
Else
lWidth = 0
End If
Thanks for your contribution, I have not been able to replicate the error you mention but if that is the solution I will take it into account for the next update. thanks for informing me.
El error qque encontre es que no corrige palabras en mayusculas
no estoy seguro que sea un error por estar mayúscula, al menos SpellCheckerFactorys no lo considera asi.
¿Cómo elimino las líneas onduladas en una palabra cuando Sub DrawLine solo dibuja las líneas?