In VCL-Anwendungen drucken

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Eigenschaften des Canvas-Objekts verwenden

Das VCL-Objekt Vcl.Printers.TPrinter kapselt Details der Windows-Drucker.

Mithilfe der Eigenschaft Printers erhalten Sie eine Liste der installierten und verfügbaren Drucker. Beider Druckerobjekte verwenden TCanvas (das identisch ist mit dem TCanvas des Formulars), so dass alles, was auf einem Formular gezeichnet wird, auch gedruckt werden kann. Um ein Bild zu drucken, rufen Sie die Methode BeginDoc auf, gefolgt von der zu druckenden Zeichenflächengrafik (wobei zusätzlich Text über die Methode TextOut ausgegeben werden kann), und senden den Druckauftrag an den Drucker, indem Sie die Methode EndDoc aufrufen.

In diesem Beispiel wird ein Formular mit einer Schaltfläche und einer Memokomponente verwendet. Wenn der Benutzer auf die Schaltfläche klickt, wird der Inhalt des Memos mit einem 200-Pixel-Rahmen um die Seite gedruckt.

Um dieses Beispiel erfolgreich nachvollziehen zu können, fügen Sie Ihrer uses-Klausel Printers hinzu.

 procedure TForm1.Button1Click(Sender: TObject);
 var
 r: TRect;
 i: Integer;
 begin
   with Printer do
   begin
     r := Rect(200,200,(Pagewidth - 200),(PageHeight - 200));
     BeginDoc;
     Canvas.Brush.Style := bsClear;
     for i := 0 to Memo1.Lines.Count do
       Canvas.TextOut(200,200 + (i * Canvas.TextHeight(Memo1.Lines.Strings[i])), Memo1.Lines.Strings[i]);
     Canvas.Brush.Color := clBlack;
     Canvas.FrameRect(r);
     EndDoc;
   end;
 end;

In folgendem Beispiel wird ein Formular mit einer Schaltfläche und einer Memokomponente verwendet. Wenn der Benutzer auf die Schaltfläche klickt, wird der Inhalt des Memos mit einem 200-Pixel-Rahmen um die Seite gedruckt. Damit dieses Beispiel erfolgreich ausgeführt werden kann, fügen Sie <Printers.hpp> in Ihre Unit-Datei ein.

 void __fastcall TForm1::Button1Click(TObject *Sender) {
         TPrinter *Prntr = Printer();
         TRect r = Rect(200,200,Prntr->PageWidth - 200,Prntr->PageHeight- 200);
         Prntr->BeginDoc();
         for( int i = 0; i < Memo1->Lines->Count; i++)
                 Prntr->Canvas->TextOut(200,
                         200 + (i * Prntr->Canvas->TextHeight(Memo1->Lines->Strings[i])), 
                         Memo1->Lines->Strings[i]);
         Prntr->Canvas->Brush->Color = clBlack;
         Prntr->Canvas->FrameRect(r);
         Prntr->EndDoc();
}

Siehe auch