Ir al contenido


Foto

Richmemo para word


  • Por favor identifícate para responder
1 respuesta en este tema

#1 El_Chava

El_Chava

    Member

  • Miembros
  • PipPip
  • 40 mensajes

Escrito 29 octubre 2015 - 10:52

Hola amigos del foro tengo problema que espero y me puedan ayudar a resolver y es el siguiente. Actualmente ando trabajando un mini procesador de texto en lazarus utilizando el componente RichMemo que seria el RichEdit en delphi. Ahora bien lo que necesito hacer es que el contenido que tenga RichMemo se envie a un documento en word y que conserve el formato del documento. Qué respete si puso en negrita, cursiva, subrayado, los tabs, etc.. y se visualice en el documento en word. El documento en word esta en formato RTF. Ya que las pruebas que he realizado si se envia la información pero no conserva el formato del richMemo. Espero haberme explicado bien y de antemano muchas gracias por sus respuestas.


  • 0

#2 El_Chava

El_Chava

    Member

  • Miembros
  • PipPip
  • 40 mensajes

Escrito 29 octubre 2015 - 03:42

Bueno al fin dí con una solución no se si será la más adecuada pero hace lo que necesito. Para esto se uso un marcador en donde se insertara lo contenido en el richMemo. Al final lo que utilice es que lo que contenga en el richmemo lo coopio al portapapeles y al final realizo un pegado especial en el documento word. Aquí les dejo el código.


delphi
  1. var
  2. Word,marcador,doc1: Variant;
  3. w:widestring;
  4. try
  5. {* a la variable "w" le asigno la ruta donde se encuentra la plantilla a utilizar *}
  6. w:= UTF8Decode(ExtractFilePath(application.ExeName)+'plantillas\Respuesta01.rtf');
  7. Word := CreateOleObject('Word.Application');
  8. (* Añades un documento basado en la plantilla *)
  9. Documento := Word.Documents.Add(w);
  10. Documento := Word.Documents.Item(1);
  11. doc1:= Word.ActiveDocument;
  12. RichMemo1.SelectAll; {Se selecciona todo el texto que contenga el Rich memo}
  13. RichMemo1.CopyToClipboard {Se copia lo seleccionado al portapapeles};
  14. Richmemo1.SelLength:=0 {se quita la selección};
  15. if Doc1.Bookmarks.Exists('prueba') then {Chequea si existen las marcas en el documento}
  16. Begin
  17. Doc1.Bookmarks.Item('prueba').Range.PasteSpecial;
  18. {Se realiza el pegado especial del portapapeles en el marcador creado
  19.  en el documento de word}
  20. end;
  21.  
  22. Word.Visible := true; {Make Word visible}
  23. Clipboard.Clear;{se limpia el portapales}
  24. except
  25. on E: Exception do
  26. ShowMessage(SysToUTF8(E.Message));
  27. end;

Para limpiar el portapaples es necesario que usar el unit Clipbrd. Espero y les sirva este metodo. Saludos. ^\||/
 


  • 5




IP.Board spam blocked by CleanTalk.