Ir al contenido


Foto

[RESUELTO] Usando Word como corrector ortográfico en un TDbMemo.


  • Por favor identifícate para responder
13 respuestas en este tema

#1 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 20 septiembre 2010 - 09:45

Así es, compañerit@s del foro..., tengo que utilizar Microsoft Word como corrector ortográfico de un campo TDbMemo.

Si tuviesen una sugerencia, ayuda o muestra de apoyo, se las agradeceré muchísimo.
  • 0

#2 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 20 septiembre 2010 - 09:52

Buenas,

En su día necesité algo parecido y buscando por internet di con un hilo de CD, éste
http://www.clubdelph...tor ortografico

Me quedé con la solución de Roman, el usar la ISpell

Nos leemos

  • 0

#3 Master23

Master23

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 230 mensajes
  • LocationSanto Domingo

Escrito 20 septiembre 2010 - 09:53



delphi
  1. uses ComObj, ClipBrd, ShellApi;
  2.  
  3. procedure TForm1.Button1Click(Sender: TObject);
  4. var
  5.   WindowName: string;
  6.   WindowHandle: Cardinal;
  7.   WordApp, Document, Selection: OleVariant;
  8. begin
  9.   WordApp := CreateOleObject('Word.Application');
  10.   Document := WordApp.Documents.Add;
  11.   Selection := WordApp.Selection;
  12.   Selection.TypeText(memo1.Text);
  13.   // Para que no salga la ventana del Word despues de revisar la gramtica/ortografia
  14.   WindowName := WordApp.ActiveDocument.FullName + ' - ' + WordApp.Application.Caption;
  15.   WindowHandle := 0;
  16.   WindowHandle := FindWindow(nil, pChar(WindowName));
  17.   SetWindowRgn(WindowHandle, CreateRectRgn(0,0,0,0), true);
  18.  
  19.   // Empezamos revisar la ortografia
  20.   WordApp.ActiveDocument.CheckGrammar;
  21.   Selection.WholeStory;
  22.   Selection.Copy;
  23.   Edit1.Text := Clipboard.AsText;
  24.   // Mandamos a cerrar el Word con el programa TSkill
  25.   ShellExecute(Handle, nil, 'tskill', 'winword', nil, sw_hide);
  26. end;



Puedes aplicar ese código aunque según leí que es algo lento pero depende en el tipo de maquina y la capacidad que tenga.(fuente clubdelphi)
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 20 septiembre 2010 - 10:01

La opción de cHackAll tampoco tiene desperdicio y sin utilizar componentes de terceros, incluso te modifica el texto una vez terminado el chequeo del texto.

Digo, como a mi no me gusta llenarme de componentes adicionales :p

Salud OS
  • 0

#5 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 20 septiembre 2010 - 10:10

Buenas,

La opción de cHackAll tampoco tiene desperdicio y sin utilizar componentes de terceros, incluso te modifica el texto una vez terminado el chequeo del texto.

Digo, como a mi no me gusta llenarme de componentes adicionales :p


Sí, yo soy del mismo pensamiento que tu, pero hay PCs que no tienen el Office instalado o son "viejos" y se hace muy lento su uso, por eso tiré por la otra opción que, a parte de ser free, no depende de Office :)

Nos leemos

  • 0

#6 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 20 septiembre 2010 - 10:16

La opción de cHackAll tampoco tiene desperdicio y sin utilizar componentes de terceros, incluso te modifica el texto una vez terminado el chequeo del texto.

Digo, como a mi no me gusta llenarme de componentes adicionales :p

Salud OS


Estoy de acuerdo respecto al uso de componentes..., y más cuando se desarrolla en equipo y no todos tienen idéntica instalación de Delphi.

Probaré la de Chackall y les platico...
  • 0

#7 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 20 septiembre 2010 - 10:19



delphi
  1. uses ComObj, ClipBrd, ShellApi;
  2.  
  3. procedure TForm1.Button1Click(Sender: TObject);
  4. var
  5.   WindowName: string;
  6.   WindowHandle: Cardinal;
  7.   WordApp, Document, Selection: OleVariant;
  8. begin
  9.   WordApp := CreateOleObject('Word.Application');
  10.   Document := WordApp.Documents.Add;
  11.   Selection := WordApp.Selection;
  12.   Selection.TypeText(memo1.Text);
  13.   // Para que no salga la ventana del Word despues de revisar la gramtica/ortografia
  14.   WindowName := WordApp.ActiveDocument.FullName + ' - ' + WordApp.Application.Caption;
  15.   WindowHandle := 0;
  16.   WindowHandle := FindWindow(nil, pChar(WindowName));
  17.   SetWindowRgn(WindowHandle, CreateRectRgn(0,0,0,0), true);
  18.  
  19.   // Empezamos revisar la ortografia
  20.   WordApp.ActiveDocument.CheckGrammar;
  21.   Selection.WholeStory;
  22.   Selection.Copy;
  23.   Edit1.Text := Clipboard.AsText;
  24.   // Mandamos a cerrar el Word con el programa TSkill
  25.   ShellExecute(Handle, nil, 'tskill', 'winword', nil, sw_hide);
  26. end;



Puedes aplicar ese código aunque según leí que es algo lento pero depende en el tipo de maquina y la capacidad que tenga.(fuente clubdelphi)


De hecho, el código que estoy modificando es precisamente éste..., y no me funciona.
  • 0

#8 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 20 septiembre 2010 - 10:24

Buenas,

Pues ese código yo no lo puedo probar, soy de los que no usan el Office :p (viva OO!!! :D :D :D)

Nos leemos

  • 0

#9 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 20 septiembre 2010 - 10:39

De hecho, el código que estoy modificando es precisamente éste..., y no me funciona.


Ya probaste el código que enlazo de cHackAll, ya lo probé y funciona correctamente, de hecho es una modificación en base al código que estás probando.

Salud OS
  • 0

#10 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 20 septiembre 2010 - 10:40

Buenas,

Pues ese código yo no lo puedo probar, soy de los que no usan el Office :p (viva OO!!! :D :D :D)

Nos leemos


Bueno, si partimos del hecho que el amigo Felipe.mx indica que "debe ser" con el corrector ortográfico de MS-Office, pues le funciona :D :D :D

Salud OS

PD, yo también uso OO en mi máquina y MS-Office en el de la oficina.
  • 0

#11 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 20 septiembre 2010 - 10:42

Ya probaste el código que enlazo de cHackAll, ya lo probé y funciona correctamente, de hecho es una modificación en base al código que estás probando.

Salud OS


Precisamente, en ésas ando..., aparentemente, el que tiene el problema soy yo, por que en otra máquina ejecuta perfectamente cualquiera de ambos códigos. ¡¡Rayos!!, hablando de máquinas que no están sincronizadas.

Si deseas dar por resuelto el hilo, yo no me opondré...
  • 0

#12 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 20 septiembre 2010 - 12:42

Aclaraciones necesarias.

Éste código:



delphi
  1. uses ComObj, ClipBrd, ShellApi;
  2.  
  3. procedure TForm1.Button1Click(Sender: TObject);
  4. var
  5.   WindowName: string;
  6.   WindowHandle: Cardinal;
  7.   WordApp, Document, Selection: OleVariant;
  8. begin
  9.   WordApp := CreateOleObject('Word.Application');
  10.   Document := WordApp.Documents.Add;
  11.   Selection := WordApp.Selection;
  12.   Selection.TypeText(memo1.Text);
  13.   // Para que no salga la ventana del Word despues de revisar la gramtica/ortografia
  14.   WindowName := WordApp.ActiveDocument.FullName + ' - ' + WordApp.Application.Caption;
  15.   WindowHandle := 0;
  16.   WindowHandle := FindWindow(nil, pChar(WindowName));
  17.   SetWindowRgn(WindowHandle, CreateRectRgn(0,0,0,0), true);
  18.  
  19.   // Empezamos revisar la ortografia
  20.   WordApp.ActiveDocument.CheckGrammar;
  21.   Selection.WholeStory;
  22.   Selection.Copy;
  23.   Edit1.Text := Clipboard.AsText;
  24.   // Mandamos a cerrar el Word con el programa TSkill
  25.   ShellExecute(Handle, nil, 'tskill', 'winword', nil, sw_hide);
  26. end;



Puedes aplicar ese código aunque según leí que es algo lento pero depende en el tipo de maquina y la capacidad que tenga.(fuente clubdelphi)


Como el del amigo cHackAll, funcionan ÚNICAMENTE con el texto directamente tomado desde el componente de texto que se trate. No permiten, por ejemplo, enviar el contenido de ése componente o campo como un texto o variable, por que NO FUNCIONARÁ. Pequeño detalle que creo que será conveniente hacer saber a la comunidad.

Y ahora sí, doy por resuelto el hilo.
  • 0

#13 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 20 septiembre 2010 - 01:14

Una precisión más. El texto debe haber cambiado mínimamente para que el objeto se ejecute; lo cual obliga a buscar alguna manera de "forzar" la ejecución del objeto de Word en cualquier momento, aún sin edición.

También depende mucho de la actualización del diccionario de Word, como es lógico y de esperarse; afortunadamente se conserva la funcionalidad de agregar palabras nuevas al diccionario.
  • 0

#14 Victor_Matrix

Victor_Matrix

    Newbie

  • Miembros
  • Pip
  • 1 mensajes

Escrito 12 abril 2022 - 08:43

Muchas gracias, yo implemente este código para adaptarlo a un proyecto y me funciono de maravilla  


  • 0




IP.Board spam blocked by CleanTalk.