Zitat von
gullatrulla:
Gibt es eine Möglichkeit die exakte Pixel-Druckposition der letzten RTF-Zeile zu ermitteln,
damit die "manuelle" Zeile exakt unterhalb des RTF-Dokuments gedruckt werden kann?
Auch die gibt es, obwohl dazu heutzutage nichts mehr im
MSDN zu finden ist. Du kannst dazu die Kombination von EM_FORMATRANGE(0)/EM_DISPLAYBAND nutzen - Beispiel:
Delphi-Quellcode:
//----------------------------------------------------------------------
Printer.BeginDoc;
...
SendMessage(
Handle, EM_FORMATRANGE, 0, 0);
try
Range.rcPage := Range.rc;
// Rechteck merken, falls nicht bereits geschehen
repeat
chrg.cpMin := LastChar;
Range.rc := Range.rcPage;
// Rechteck wiederhestellen
LastChar := SendMessage(Self.Handle, EM_FORMATRANGE, 0, LParam(@Range));
SendMessage(Self.Handle, EM_DISPLAYBAND, 0, LParam(@Range.rc));
{ In Range.rc.bottom steht jetzt die unterste Pixelposition,
bis zu der etwas gedruckt wurde. }
if (LastChar < MaxLen)
and (LastChar <> -1)
then begin
NewPage;
Inc(PageCountRich);
end;
until (LastChar >= MaxLen)
or (LastChar = -1);
finally
SendMessage(
Handle, EM_FORMATRANGE, 0, 0);
SetMapMode(hdc, OldMap);
end;
Printer.EndDoc;
Sicher musst du damit noch ein bisschen herumprobieren. Ich benutze es, um damit einzelne (stellenweise mehr als 2000) RTF-Fragmente zusammen mit Kapitel- und Abschnittsüberschriften wie Fließtext als ein Dokument auszudrucken.