Hallo,
ich habe ein Projekt von D6 auf XE4 konvertiert und dieses druckt RTF Dateien.
Ich habe nun das Problem das mir
Code:
LastChar := SendMessage(NewRichEdit.Handle, EM_FORMATRANGE, 0, Longint(@Range));
showmessagefmt('<%d><%d>',[LastChar,NewRichEdit.GetTextLen]);
Erg XE4 : <172><178>
Erg D6 : <180><178>
Unter XE4 Zeichen unterschlägt. Bei einem Test mit einer RTF Datei gibt mir die Funktion unter D6 180 und unter XE4 172 Zeichen zurück.
Das Problem ist, dass drumherum eine Schleife läuft bis alle Zeichen gedruckt sind und dadurch eine Endlosschleife entsteht, weil das Richedit wirklich 178 Zeichen ist.
Dabei ist es auch egal ob TFormatRange chrg.cpMax auf -1 oder auf NewRichEdit.GetTextLen sitzt.
Nachtrag:
Interessant ist, füge ich 3 Leerzeilen hinzu, steigt die Länge um 6, aber der Befehl oben nur um 3.
D.h ich habe nun 1 Zeile mit einem Zeichen.
Resultat 1 -1
Füge ich noch eine Zeile dazu mit einem Zeichen.
dann ist es 3-4. D.h Return wird als 2 gezählt mit
GetTextLen aber nur mit einem mit
SendMessage()
Nachtrag 2 Lösung
Sorry
Ich habe das Problem gefunden
.getTextLen von TRichedit zählt in XE wohl wirklich 2 Zeichen für ein Return.
SendMessage(NewRichEdit.Handle, EM_GETTEXTLENGTHEX, WParam(@TextLenEx), 0); gibt die korrekte Anzahl der Zeichen zurück.