Also vorneweg, das Trichedit ist
Kein Textverarbeitungssystem!
Es Ersetzt nicht Word & Co!
D.h. es gibt keine Kopf und Fußzeile, keine Abschnittswechsel, keine Seitenzählung usw.!
Wenn Du eine Seitenzählung willst, dann bleibt Dir nichts anderes als die Ausdruckroutine an Deine Bedürfnisse anzupassen:
Delphi-Quellcode:
procedure TCustomRichEdit.Print(
const Caption:
string);
var
Range: TFormatRange;
LastChar, MaxLen, LogX, LogY, OldMap: Integer;
SaveRect: TRect;
begin
FillChar(Range, SizeOf(TFormatRange), 0);
with Printer, Range
do
begin
Title := Caption;
BeginDoc;
hdc :=
Handle;
hdcTarget := hdc;
LogX := GetDeviceCaps(
Handle, LOGPIXELSX);
LogY := GetDeviceCaps(
Handle, LOGPIXELSY);
if IsRectEmpty(PageRect)
then
begin
rc.right := PageWidth * 1440
div LogX;
rc.bottom := PageHeight * 1440
div LogY;
end
else begin
rc.left := PageRect.Left * 1440
div LogX;
rc.top := PageRect.Top * 1440
div LogY;
rc.right := PageRect.Right * 1440
div LogX;
rc.bottom := PageRect.Bottom * 1440
div LogY;
end;
rcPage := rc;
SaveRect := rc;
LastChar := 0;
MaxLen := GetTextLen;
chrg.cpMax := -1;
// ensure printer DC is in text map mode
OldMap := SetMapMode(hdc, MM_TEXT);
SendMessage(Self.Handle, EM_FORMATRANGE, 0, 0);
// flush buffer
try
repeat
rc := SaveRect;
chrg.cpMin := LastChar;
LastChar := SendMessage(Self.Handle, EM_FORMATRANGE, 1, Longint(@Range));
if (LastChar < MaxLen)
and (LastChar <> -1)
then NewPage;
until (LastChar >= MaxLen)
or (LastChar = -1);
EndDoc;
finally
SendMessage(Self.Handle, EM_FORMATRANGE, 0, 0);
// flush buffer
SetMapMode(hdc, OldMap);
// restore previous map mode
end;
end;
end;
(Da Dir augenscheinlich die
RTL fehlt habe ich sie einfach mal kopiert)
Vielleicht hilft Dir auch das
hier weiter.
Gruß
K-H