Einzelnen Beitrag anzeigen

Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Exakte Druckposition der letzten RichEdit-Zeile herausfi

  Alt 8. Jul 2008, 20:07
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.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat