Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   copiar texto sin formato en un TRichEdit!!!! (https://www.clubdelphi.com/foros/showthread.php?t=28076)

aranel 08-12-2005 10:45:35

copiar texto sin formato en un TRichEdit!!!!
 
Hola chic@s!! tengo un gran problema!! :( A ver, estoy haciendo un editor en Delphi, mediante un RichEdit. En este editor puedo cambiar el tipo de letra, el tamaño y demás, pero cuando copio en él texto de otro sitio (por ejemplo de Word, PowerPoint, Notepad, una pagina Web...) pues desearía que se pegara, pero con el formato actual que tengo en mi editor.

Por un lado, tengo puesto en el RichEdit la propiedad TextPlain := True, para que el texto escrito me lo guarde en los ficheros como texto plano.

Por otro lado, si no hago nada y utilizado la función estándar que me ofrece Delphi para copiar y pegar en un RichEdit, me copia el nuevo texto en mi editor con el formato original (tipo de letra, tamaño, interlineado ...) con lo que acabaría con 2 formatos en mi editor, y eso no es deseable.

He coseguido mediante el siguiente codigo (quizás demasiado enrevesado, pero no he encontrado otra forma para que funcione) que cuando copio texto en mi editor, me cambie la fuente y el tamaño de letra del nuevo texto al que yo tenia puesto originalmente en mi editor:

Código Delphi [-]
 
procedure TfrmPrincipal.EditPaste1Execute(Sender: TObject);
var
  i: integer;
  nombreFuente: String;
begin
  nombreFuente := (frmEditor.PageControl1.ActivePage.Controls[IndiceEditor] as TRichEdit).Font.Name;
  if (strcmp(PChar(nombreFuente),'Tunga') = 0)then
    (frmEditor.PageControl1.ActivePage.Controls[IndiceEditor] as TRichEdit).Font.Name := 'Webdings'
  else
    (frmEditor.PageControl1.ActivePage.Controls[IndiceEditor] as TRichEdit).Font.Name := 'Tunga';

  (frmEditor.PageControl1.ActivePage.Controls[IndiceEditor] as TRichEdit).PasteFromClipboard;

  (frmEditor.PageControl1.ActivePage.Controls[IndiceEditor] as TRichEdit).Font :=
    (frmEditor.PageControl1.ActivePage.Controls[IndiceLineas] as TRichEdit).Font;

  (frmEditor.PageControl1.ActivePage.Controls[IndiceEditor] as TRichEdit).DefAttributes :=
    (frmEditor.PageControl1.ActivePage.Controls[IndiceLineas] as TRichEdit).DefAttributes;

  (frmEditor.PageControl1.ActivePage.Controls[IndiceLineas] as TRichEdit).clear;
  (frmEditor.PageControl1.ActivePage.Controls[IndiceLineas] as TRichEdit).Color := clBackground;
end;
Realmente lo que hago con el texto anterior, es que tengo dos RichEdit, y en uno nunca modifico el formato y nunca copio texto en él, entonces cuando copio un nuevo texto en el segundo RichEdit, lo que hago es asignarle despues es asignarle sus propiedades font y defAttributes, para que tengan el msimo formato.

Sin embargo, si el texto que copio (por ejemplo desde Word) tiene un interlineado distinto de sencillo (por ejemplo doble) me mantiene dicho interlineado y eso tampoco quiero que pase. Pero ya no se me ocurre nada para arreglarlo

Agradecería muchísimo vuestra ayuda!! ;)

UN BESAZO!!

jjfgg 20-12-2005 19:24:17

Talvés lo más facil sea cambiar el formato del texto en el clipboard antes de pegar el texto. De la siguiente manera:

Código Delphi [-]
uses
  Clipbrd;
procedure TForm2.EditPaste1Execute(Sender: TObject);
var
  T: PChar;
begin
  Clipboard.SetTextBuf(PChar( Clipboard.AsText )); // reemplaza el texto en el clipboard por texto sin formato
  RichEdit1.PasteFromClipboard;
end;


La franja horaria es GMT +2. Ahora son las 11:30:05.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi