Die Meldung "Das
Handle ist ungültig" ist eindeutig der Rückgabewerte von "GetLastError" !
Zusatzvariable "s" ( string ) und dann dies :
Delphi-Quellcode:
if SendMessage(RichEdit1.Handle, EM_SETPARAFORMAT, 0, lParam(@fmt)) = 0 then
begin
// s:=SysErrorMessage(GetLastError);
ShowMessage(s)
end
ergibt eine leere Meldung ohne Text. Also scheint doch wenigstens "GetLastError" korrekt zu funktionieren. Die Stelle, an der abgespeichert werden sollte, wird gar nicht erst erreicht. Folglich ist meine Theorie von vorhin schon deshalb falsch.
Wenn die Auswertung unbeachtet bleibt und man die Datei dennoch speichert, funktioniert das Anhängen nämlich.
Jetzt bleibt allerdings die Frage, wieso "RichEdit1.Handle" als ungültig erachtet wird. Interessanterweise aber nur bei EM_SETPARAFORMAT und nicht bei EM_GETPARAFORMAT. Genauer : Wenn erst GET und später SET aufgerufen wird. Zweimal gleich ist egal und erst SET und danach GET ebenso.
Oh !
Jetzt habe ich es mal mit einer nicht künstlich generierten, sondern von OO erzeugten RTF-Datei probiert. Stimmt ! Jede Formatierung ist weg und die Datei wird kleiner. Also ganz wie beschrieben.
Oh,
oh,
oh ! Probier einfach mal das, ohne alles andere :
Delphi-Quellcode:
RichEdit1.Lines.LoadFromFile(TestFile);
RichEdit1.Lines.SaveToFile(TestFile2);
Die Formatierung ist offenbar bereits beim Laden weg. Im Klartext heißt das, die übrigen Zuweisungen werten die Datei nicht korrekt aus. Ich habe es auch mit anderen Reihenfolgen probiert.
Wieso geht es mit selbst generierten RTF-Dateien und nicht bei anderen ? Das kann doch eigentlich nur heißen, daß andere Programme das gewünschte Ergebnis auf andere Weise erzeugen.
Für heute reicht es mir.