// Inhalt eines TRichedit an den Standard-Drucker senden.


// Getestet mit D2010 unter Win7

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;


 

Zugriffe seit 6.9.2001 auf Delphi-Ecke