uses Printers;
function RichEditDruck(RE: TRichEdit; RandLinks, RandRechts, RandOben,
RandUnten: Double; Kopien: Word = 1): Byte;
const
fak = 2.54;
var
Links, Rechts, Oben, Unten: Double;
X, Y, L, O, I: Integer;
RCT: TRect;
H: THandle;
S: String;
begin
Result := 1;
if Kopien < 1 then
exit;
try
H := Printer.Handle;
Links := RandLinks / fak;
Rechts := RandRechts / fak;
Oben := RandOben / fak;
Unten := RandUnten / fak;
X := GetDeviceCaps(H, LOGPIXELSX);
Y := GetDeviceCaps(H, LOGPIXELSY);
L := GetDeviceCaps(H, PHYSICALOFFSETX);
O := GetDeviceCaps(H, PHYSICALOFFSETY);
RCT.Left := Round(X * Links) - L;
RCT.Right := Printer.PageWidth - Round(X * Rechts) - L;
RCT.Top := Round(Y * Oben) - O;
RCT.Bottom := Printer.PageHeight - Round(Y * Unten) - O;
RE.PageRect := RCT;
for I := 1 to Kopien do
begin
application.ProcessMessages;
S := 'Richedit-Druck ';
if Kopien > 1 then
S := S + 'Kopie ' + IntToStr(I);
RE.Print(S);
end;
Result := 0;
except
Result := 2;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
B: Byte;
S: String;
begin
RichEdit1.Lines.LoadFromFile('Test.rtf'); // z. B.
B := RichEditDruck(RichEdit1, 2.5, 2.5, 2.2, 2.2);
case B of
0:
S := 'Druckauftrag wurde an den Standard-Drucker gesendet.';
1:
S := 'Es muss mindestens 1 Kopie angegeben werden.';
2:
S := 'Der Druckauftrag wurde nicht ordnungsgemäß beendet.';
end;
showmessage(S);
end;