Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Inhalt von TRichEdit ohne Verlust von DefAttributes kopieren (https://www.delphipraxis.net/53423-inhalt-von-trichedit-ohne-verlust-von-defattributes-kopieren.html)

smart 16. Sep 2005 12:01

Re: Inhalt von TRichEdit ohne Verlust von DefAttributes kopi
 
Wenn ich es per Hand, mit kopieren und einfügen mache klappt es, aber sobald ich es mit:
Delphi-Quellcode:
RichEdit1.SelectAll;
RichEdit.CopyToClipboard;
DBRichEdit1.PasteFromClipboard;
klappt es nicht mehr.

marabu 16. Sep 2005 12:39

Re: Inhalt von TRichEdit ohne Verlust von DefAttributes kopi
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Heike,

es gibt keinen so richtig einfachen Weg zum Kopieren von formatierten Texten zwischen zwei RichEdit controls. Ich verwende folgende Prozedur:

Delphi-Quellcode:
uses
  TOM,
  RichEdit,
  RichOle;

procedure RichCopy(reSource, reTarget: TRichEdit);
var
  u: IUnknown;
  reoSource, reoTarget: IRichEditOle;
  tdSource, tdTarget: ITextDocument;
  trSource, trTarget: ITextRange;
begin
  SendMessage(reSource.Handle, EM_GETOLEINTERFACE, 0, Integer(@u));
  u.QueryInterface(IID_IRICHEDITOLE, reoSource);
  tdSource := reoSource as ITextDocument;

  SendMessage(reTarget.Handle, EM_GETOLEINTERFACE, 0, Integer(@u));
  u.QueryInterface(IID_IRICHEDITOLE, reoTarget);
  tdTarget := reoTarget as ITextDocument;

  tdTarget.Selection.FormattedText := tdSource.Selection.FormattedText;
end;
Das angehängte Archiv enthält eine bei SourceForge gehostete Delphi Portierung von RichOle.h und TOM habe ich mit TLIBIMP aus RICHED20.DLL erstellt. TOM habe ich als (unsichtbare) Komponente in Delphi installiert.

Nutzen kannst du es dann so:

Delphi-Quellcode:
begin
  RichEdit1.SelectAll;
  RichEdit2.SelectAll;
  RichCopy(RichEdit1, RichEdit2);
end;
Alternativ kann man den etwas traditionelleren Weg über das stream interface der rich edit controls gehen. nicoDE hat dazu etwas bei den Schweizern abgeladen.

Grüße vom marabu

DP-Maintenance 16. Sep 2005 12:46

DP-Maintenance
 
Dieses Thema wurde von "Sharky" von "Sonstige Fragen zu Delphi" nach "VCL / WinForms / Controls" verschoben.
Ich habe es (auf anregung *g*) mal nach VCL verschoben. Hätte ich aber auch früher machen sollen.

Flocke 16. Sep 2005 13:35

Re: Inhalt von TRichEdit ohne Verlust von DefAttributes kopi
 
Es sollte auch mit den Meldungen EM_STREAMOUT und EM_STREAMIN gehen. Zwei Beiträge dazu findest du hier und hier.

//EDIT: @marabu: Sorry, deinen Verweis auf das Stream-Interface hatte ich überlesen.

marabu 16. Sep 2005 14:46

Re: Inhalt von TRichEdit ohne Verlust von DefAttributes kopi
 
Hallo Heike,

Zitat:

Zitat von smart
Wenn ich es per Hand, mit kopieren und einfügen mache klappt es, aber sobald ich es mit:
Delphi-Quellcode:
RichEdit1.SelectAll;
RichEdit.CopyToClipboard;
DBRichEdit1.PasteFromClipboard;
klappt es nicht mehr.

ich unterstelle mal, dass der abweichende Komponentenname in der zweiten Code-Zeile ein Schreibfehler von dir ist. Das Kopieren über das ClipBoard funktioniert so - und zwar korrekt. Voraussetzung ist, dass sich der deinem DBRichEdit1 unterliegende DataSet im Edit-Modus befindet.

Allerdings gehört die Zwischenablage dem Benutzer und darf eigentlich nur auf seinen speziellen Wunsch hin von deinem Programm befüllt werden.

marabu


@Flocke: Warum sorry? Deine Fundstellen sind doch auch einen Beitrag wert. Da aber alle streamen wollte ich mit dem Text Object Model eine Alternative zeigen.

smart 16. Sep 2005 15:36

Re: Inhalt von TRichEdit ohne Verlust von DefAttributes kopi
 
Zitat:

Zitat von marabu
ich unterstelle mal, dass der abweichende Komponentenname in der zweiten Code-Zeile ein Schreibfehler von dir ist.

War nur ein Schreibfehler!

Zitat:

Zitat von marabu
Das Kopieren über das ClipBoard funktioniert so - und zwar korrekt. Voraussetzung ist, dass sich der deinem DBRichEdit1 unterliegende DataSet im Edit-Modus befindet.

Genau das war das Spiel, jetzt klappt es nämlich.
Zitat:

Zitat von marabu
Allerdings gehört die Zwischenablage dem Benutzer und darf eigentlich nur auf seinen speziellen Wunsch hin von deinem Programm befüllt werden.

Hast Recht, war auch nur ein Test.

Vielen Dank für Deine (Eure) Hilfe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz