![]() |
Druck auf einen Drucker geht nicht, auf anderen schon
Hallo
Ich habe in meinem Programm den PrintDialog eingefügt um den Drucker bestimmen zu können. Auf einem zweiten Formular existiert eine TImage-Komponente (Align=alClient) für die Druckvorschau. Ich habe folgenden QuellText:
Delphi-Quellcode:
Ich habe 2 Drucker in meinem System installiert:
procedure TForm1.Drucken1;
var Image: TImage; pmaxx: Integer; // Breite der Ausgabe auf Drucker; pmaxy: Integer; // Entsprechend Höhe; begin if PrintDialog1.Execute then begin pmaxx := Printer.PageWidth-1; pmaxy := Printer.PageHeight-1; Application.CreateForm(TForm2, Form2); Image := Form2.Image1; // Berechnung der Breite der Druckausgabe in Variable widt ... // Form2.ClientWidth := widt; Form2.ClientHeight := Round(widt*Power(2, 0.5)); // DIN A-Format einrichten Image.Picture.Bitmap.Width := widt; Image.Picture.Bitmap.Height := Round(widt*Power(2, 0.5)); // DIN A-Format einrichten with Image.Canvas do begin // Ausgabe auf Image.Canvas ... // end; Printer.Title := 'Druckausgabe'; Printer.BeginDoc; Printer.Canvas.StrechDraw(Rect(0,0,pmaxx,pmaxy), Image.Picture.Bitmap); Printer.EndDoc; FreeAndNil(Form2); end; end; procedure TForm1.Drucken2; var pmaxx : Integer; pmaxy : Integer; begin if PrintDialog1.Execute then begin Printer.Title := 'Test'; pmaxx := Printer.PageWidth-1; pmaxy := Printer.PageHeight-1; Printer.BeginDoc; Printer.Canvas.TextOut(pmaxx div 2 - Printer.Canvas.TextWidth('TEUEUZGJ') div 2,pmaxy div 15,'TEUEUZGJ'); Printer.EndDoc; end; end; 1 Lexmark Z65 1 PDFCreater Wenn ich bei der Methode Drucken1 den PDFCreator wähle, dann funzt das drucken. Wähle ich aber den Lexmark, so schmeißt der Drucker ein leeres Blatt aus. Zeichne ich aber direkt auf den Canvas von Printer (Methode Drucken2), dann erscheint die Ausgabe wie gewünscht auf dem Papier. Den Umweg über ein TImage mache ich deshalb, weil man den Drucker und die Größe des Ausgabe-Papiers (A5, A4, A3) auswählen kann. So kann ich die Ausgabe mit fixen Daten vorbereiten und dann auf die entsprechende Ausgabegröße skalieren lassen (Ich weiß, dass dadurch Qualität verloren geht, aber das ist bei der Ausgabe unwichtig). |
Re: Druck auf einen Drucker geht nicht, auf anderen schon
das liegt einfach nur an der Art und weise wie du das Bild auf den Drucker überträgst. Nicht alle Drucker unterstützen die Methode von StretchDraw (bitblt etc.).
Wie es bei mir bisher immer funktioniert hat war die Pixel einzeln auf den Drucker zu malen, was aber auch sehr lange dauert und das Druckdocument wird auch sehr groß. Alternativ könntest du auch fertige Komponenten verwenden die das Drucken für dich übernehmen. eventuell bekommst du es ja mit der funktion ![]() und hier mal noch ein Beispiel zur Verwendung: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz