In VCL-Anwendungen drucken
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();
}