Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Text aus RichEdit von fremder Anwendung mit Formatierung (https://www.delphipraxis.net/48924-text-aus-richedit-von-fremder-anwendung-mit-formatierung.html)

Armageddon 2. Jul 2005 16:27


Text aus RichEdit von fremder Anwendung mit Formatierung
 
Hi,

gibt es eine einfache Möglichkeit den Inhalt eines RichEdit in einer anderen Anwendung von der ich weiß das sie in Delphi geschrieben wurde in ein RichEdit in meiner Anwendung zu kopieren ohne das ich die Formatierungen verliere? Anschließend möchte ich den von mir in meinem RichEdit bearbeiteten Text wieder zurück in das RichEdit der fremden Anwendung schreiben ohne auch hier die Formatierung zu verlieren.

Ich habe hier im Forum schon gesucht, aber nichts gefunden was mich irgendwie weiter bringen könnte. Auch habe ich schon ein Beispiel vom SwissDelphiCenter ausprobiert. Welches aber nicht funktioniert da sich das Programm total aufhängt! :wall:

Hoffe irgendjemand hatte mal das gleiche Problem und hat eine funktionierende Lösung.


Dank Euch schonmal
Gruß Markus

Luckie 2. Jul 2005 16:38

Re: Text aus RichEdit von fremder Anwendung mit Formatierung
 
Dann zeig doch mal die Lösung aus dem SDC. Oder warum schreibst du nicht dem Autor?

Armageddon 2. Jul 2005 21:17

Re: Text aus RichEdit von fremder Anwendung mit Formatierung
 
Hi Luckie,

hier ist ein Link zu der Lösung aus dem SDC:
Der SDC-Artikel

Nur leider funktioniert diese unter Delphi-7 nicht. Diese Lösung gibts auch noch auf ein paar anderen Seiten mit genau den gleichen Kommentaren, nämlich das es unter Delphi-7 zu Fehlern kommt. Scheinbar ist wegen den Fehlern dem Autor auch nie geschrieben worden bzw. vielleicht hat der Autor auch die Kommentare gelesen aber sein Beispiel nicht verbessert da die paar Leute die Lösung mit dem Stream genommen haben. Was in meinem Fall aber nichts bringt da die beiden RichEdit ja nicht in einer Anwendung sind.

Hätte ja sein können das hier im Forum schonmal jemand das gleiche Problem hatte und eine andere Lösung gefunden hat.

Xanadu 3. Jul 2005 02:05

Re: Text aus RichEdit von fremder Anwendung mit Formatierung
 
Hi Armageddon,

das Handle des fremden Controls musst Du ja eh schon haben, warum gehst Du dann nicht über das Clipboard ran? Da wird das Format doch mit gezogen.

Pass aber beim Insert auf die Eigenschaft PlainText (siehe Bsp.) auf:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
    RichEdit2: TRichEdit;
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
// Beispieltext speichern.
var
  Memo1: TMemo;
begin
  SaveDialog1.FileName:= 'C:\Temp\Text.rtf';
  OpenDialog1.FileName:= SaveDialog1.FileName;
  Memo1.Create;
  Memo1.Lines.Add('{\rtf1\ansi\ansicpg1252\uc1 '              //Header mit Codepage
    + '{\colortbl;\red0\green0\blue0;\red255\green0\blue0;} ' //Farbtabelle
    + '{Ein }{\ul formatierter}{ }{\b Text}{ in }{\cf2 RTF} ' //Text mit Formatierung
    + '{\par }}');                                            //Absatzmarke
  Memo1.Lines.SaveToFile(OpenDialog.FileName);
  Memo1.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
// Beispieltext laden, also das eigentliche Beispiel.
begin
  if OpenDialog1.Execute then
  begin
    Richedit1.PlainText:= True;                                // Format ignorieren
    RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName);
    Richedit2.PlainText:= False;                               // Format behalten
    RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName);
  end;
end;

end.
Have fun, Bernd

Armageddon 3. Jul 2005 13:04

Re: Text aus RichEdit von fremder Anwendung mit Formatierung
 
So,

hab das jetzt mal so gemacht, das Handle des RichEdit hab ich ja:

Delphi-Quellcode:
SendMessage(AHandle, EM_SETSEL, 0, -1);
SendMessage(AHandle, WM_COPY, 0, 0);
RichEdit1.PasteFromClipboard;
funktioniert auch ganz gut. Nur was ist wenn das RichEdit einen Inhalt jenseits der 64KB Grenze hat hab ich mir gedacht. Ein bisschen stöbern in der Windows SDK und nach ein bisserl Googlen bin ich auf EM_EXSETSEL gestossen. Wie es da so schön heißt:

Zitat:

In a rich edit control, if the selection is not entirely contained in the first 64K, use the message EM_EXSETSEL.
Jetzt hab ich folgendes versucht aber irgendwie klappt das nicht. Was mach ich da für nen Fehler? Ich will den gesamten Text kopieren. Laut Beschreibung müßte der gesamte Text selektiert werden wenn

Zitat:

If the cpMin and cpMax members are equal, the range is empty. The range includes everything if cpMin is 0 and cpMax is - 1.
Aber irgenwie passiert da gar nichts. :wall:

Hier der Programm-Code:

Delphi-Quellcode:
var
  CharRange: TCharRange;
begin
  CharRange.cpMin := 0;
  CharRange.cpMax := -1;
  SendMessage(AHandle, EM_EXSETSEL, 0, Longint(@CharRange));
  SendMessage(AHandle, WM_COPY, 0, 0);
  RichEdit1.PasteFromClipboard;
end;
Müßte doch gehen. Oder?


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:13 Uhr.

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