Einzelnen Beitrag anzeigen

stalkingwolf

Registriert seit: 6. Mai 2011
543 Beiträge
 
#1

TRichedit auf Printer zeichnen XE(4) Problem zu D6

  Alt 23. Nov 2016, 16:30
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.

Geändert von stalkingwolf (23. Nov 2016 um 17:15 Uhr)
  Mit Zitat antworten Zitat