![]() |
Bild in TImage auf dem Drucker ausdrucken
Moin,
ich stehe vor einem Problem, zu dem es zwar viele beiträge gibt, aber die bei mir interessanterweise nicht fruchten wollen, oder ich habe einen zu großen Denkfehler. Wenn ich nach Delphi TImage Drucken google, erhalte ich viele ergebnisse, auch aus dem Forum, mit jeder menge Code beispiele, aber all diese wollen bei mir nicht zum gewünschten Ergebnis führen. Ich habe im TImage24 über die Eigenschaft Picture ein Bild Geladen, also nicht zur Laufzeit aus einer Datei und dieses möchte ich nun gerne auf meinem Drucker, zum Testen nutze ich einen PDF Printer, ausgeben. leider bleibt das Blatt immer weiß. Mein Code:
Code:
Eventuell kann mir hier ja jemand bei meinem Problem helfen, bzw. Sieht wo mein Fehler liegt.
procedure TForm4.Button1Click(Sender: TObject);
var ScaleX, ScaleY: Integer; RR: TRect; begin if PrintDialog1.Execute then begin //Printer.Title := 'Bild Drucken Delphi'; Printer.Orientation := poPortrait; Printer.BeginDoc; Printer.Canvas.TextOut (0, 0, ' '); SetMapMode (Printer.Canvas.Handle, MM_LOMETRIC); Printer.Canvas.Font.Name := 'Arial'; SetTextAlign (Handle, TA_LEFT + TA_TOP); Printer.Canvas.Font.Size := 8; Printer.Canvas.TextOut(200, -50, 'Test'); try ScaleX := GetDeviceCaps(Printer.Handle, logPixelsX) div PixelsPerInch; ScaleY := GetDeviceCaps(Printer.Handle, logPixelsY) div PixelsPerInch; RR := Rect(0, 0, Image24.picture.Width * scaleX, Image24.Picture.Height * ScaleY); Printer.Canvas.StretchDraw(RR, Image24.Picture.Graphic); finally Printer.EndDoc; end; end end; Nutze Embarcadero® Delphi 10.4 Version 27.0.40680.4203 als Community Edition Mit freundlichem Gruß x86DOS :) |
AW: Bild in TImage auf dem Drucker ausdrucken
Woher kommt TImage24? WIe ist das definiert?
Ich kenne nur TImage... |
AW: Bild in TImage auf dem Drucker ausdrucken
Folgender Code funktioniert bei mir tadellos (FMX-App unter Windows):
Delphi-Quellcode:
var
image:TImage; txt:String; printDialog:TPrintDialog; ... image:=...; txt:='...'; printDialog:=TPrintDialog.Create(nil); printDialog.FromPage:=1; printDialog.ToPage:=1; printDialog.MinPage:=1; printDialog.MaxPage:=1; printDialog.PrintRange := TPrintRange.prAllPages; if printDialog.Execute() Then begin Printer.Title:=txt; Printer.ActivePrinter; Printer.ActivePrinter.SelectDPI(600,600); Printer.Canvas.Fill.Color := TAlphaColors.Black; Printer.Canvas.Fill.Kind := TBrushKind.Solid; Printer.BeginDoc; Printer.Canvas.Font.Size:=120; Printer.Canvas.FillText(RectF(0,0,Printer.PageWidth,Printer.PageWidth/20),txt,True,1,[],TTextAlign.Leading,TTextAlign.Leading); Printer.Canvas.DrawBitmap(Image.bitmap, RectF(0,0,Image.bitmap.Width,Image.bitmap.Height), RectF(0,Printer.PageWidth/20,Printer.PageWidth/3,Printer.PageWidth/10+Printer.PageWidth/3),1,false); Printer.EndDoc; end; printDialog.Free(); |
AW: Bild in TImage auf dem Drucker ausdrucken
Zitat:
Zitat:
Zitat:
|
AW: Bild in TImage auf dem Drucker ausdrucken
Nein, du brauchst keine speziellen Units. Aber welcher Datentype ist denn dein Image. Bei mir ist es TImage aus FMX.Objects. Wenn es bei dir VCL-Image ist, dann passt dies natürlich nicht zusammen.
|
AW: Bild in TImage auf dem Drucker ausdrucken
Zitat:
Zitat:
|
AW: Bild in TImage auf dem Drucker ausdrucken
Liste der Anhänge anzeigen (Anzahl: 2)
Hi x86DOS
Zitat:
Wenn du irgendwas in PDF speichern möchtest, kannst du dazu diesen Drucker verwenden. Aber Achtung: der ist Software, keine Hardware. Wenn du diesen als "Druckermedium" auswählst und dann das Dokument mit deinem physischen Drucker ausgibst, hat dieser Drucker nichts zu drucken und gibt demnach ein leeres Blatt aus (Es sei denn, du hast die Canvas-Positionen(X,Y) nicht gespiegelt angegeben). Der PDF-Printer aber macht getreulich seine Arbeit - nur, da er keine Angabe erhält, in welche (Pdf-)Datei er drucken soll, macht er wahrscheinlich das, was Windows in so einem Fall immer macht: er druckt ins Arbitsverzeichnis - und das kann irgendwo sein. Zum Abschluss noch zwei jpegs: Anhang 54220 PDF-Drucker wählen Anhang 54221 PDF-Drucker: Datei als Druckziel wählen Der PDF-Drucker erstellt nun hier eine PDF-Datei. Gruss Delbor |
AW: Bild in TImage auf dem Drucker ausdrucken
Hi x86DOS
Delphi-Quellcode:
Und wo bestimmst du hier, welcher Drucker verwendet werden soll? Mit Printer.ActivePrinter jedenfalls nicht - in diesem Property ist der Drucker gespeichert, der zuletzt verwendet wurde, und das kann irgendeiner sein - oder eben der, den du verwendest, wenn du irgendwas ausdruckst. Falls seit dem letzten Windowsstart nichts gedruckt wurde, ist das der oberste Item in der Windows Druckerliste.
var
image:TImage; txt:String; printDialog:TPrintDialog; ... image:=...; txt:='...'; printDialog:=TPrintDialog.Create(nil); printDialog.FromPage:=1; printDialog.ToPage:=1; printDialog.MinPage:=1; printDialog.MaxPage:=1; printDialog.PrintRange := TPrintRange.prAllPages; if printDialog.Execute() Then begin Printer.Title:=txt; Printer.ActivePrinter; Printer.ActivePrinter.SelectDPI(600,600); Printer.Canvas.Fill.Color := TAlphaColors.Black; Printer.Canvas.Fill.Kind := TBrushKind.Solid; Printer.BeginDoc; Printer.Canvas.Font.Size:=120; Printer.Canvas.FillText(RectF(0,0,Printer.PageWidth,Printer.PageWidth/20),txt,True,1,[],TTextAlign.Leading,TTextAlign.Leading); Printer.Canvas.DrawBitmap(Image.bitmap, RectF(0,0,Image.bitmap.Width,Image.bitmap.Height), RectF(0,Printer.PageWidth/20,Printer.PageWidth/3,Printer.PageWidth/10+Printer.PageWidth/3),1,false); Printer.EndDoc; end; printDialog.Free(); Es sei denn, du weist dem Property einen Drucker zu. Gruss Delbor |
AW: Bild in TImage auf dem Drucker ausdrucken
Zitat:
Zitat:
Code:
Hiermit bekomme ich das normale Drucker Layout von Windows angezeigt, bei dem ich auch auswählen kann, wo gedruckt werden soll.
if printDialog.Execute() Then
|
AW: Bild in TImage auf dem Drucker ausdrucken
hallo,
wenn die Graphic zuerst gedruckt wird, funkionierts.
Delphi-Quellcode:
var
ScaleX, ScaleY: Integer; RR: TRect; map_mode: Integer; begin if PrintDialog1.Execute then begin //Printer.Title := 'Bild Drucken Delphi'; Printer.Orientation := poPortrait; Printer.BeginDoc; map_mode := GetMapMode(Printer.Canvas.Handle); Printer.Canvas.Font.Name := 'Arial'; SetTextAlign(Handle, TA_LEFT + TA_TOP); Printer.Canvas.Font.Size := 8; Printer.Canvas.TextOut(200, -50, 'Test'); try //SetMapMode(Printer.Canvas.Handle, map_mode); ScaleX := GetDeviceCaps(Printer.Handle, LOGPIXELSX) div PixelsPerInch; ScaleY := GetDeviceCaps(Printer.Handle, LOGPIXELSY) div PixelsPerInch; RR := Rect(0, 0, Image1.picture.Width * ScaleX, Image1.Picture.Height * ScaleY); Printer.Canvas.StretchDraw(RR, Image1.Picture.Graphic); Printer.Canvas.TextOut(0, 0, ''); SetMapMode(Printer.Canvas.Handle, MM_LOMETRIC); Printer.Canvas.Font.Name := 'Arial'; SetTextAlign(Handle, TA_LEFT + TA_TOP); Printer.Canvas.Font.Size := 8; Printer.Canvas.TextOut(200, -50, 'Test'); Printer.EndDoc; except Printer.Abort end; end; Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:48 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