Salut,
ich bin nach vielen Jahren wieder in Delphi (12) eingestiegen und habe eine uralte Windows-3.x-Applikation als Firemonkey-App neu geschrieben. Es geht da um mathematische Graphiken im 2D- und 3D-Raum, Sinuskurven, Kugeln, sowas. Sie soll dereinst unter macOS und Windows laufen; akltuell teste ich aber nur unter Windows 11 24H2.
Die Applikation ist fast fertig, aber das Drucken bereitet mir Probleme. Derzeit mache ich es mir noch sehr einfach - ich erzeuge ein Bitmap der Graphik und will es auf dem Drucker ausgeben - also nichts hochauflösendes oder vektorbasiertes. Ich folge dabei dem Beispiel, das in der Online-Hilfe dargestellt ist. Ich kann in ein PDF drucken - dort sieht alles so aus, wie es soll. Wenn ich hingegen direkt den Drucker wähle (ein hp Color laserjet Pro MFP M283fdn - nichts Besonderes), wird in der Windows-11-Druckerqueue der Druckauftrag angezeigt, und auch die kleine Vorschau, die W11 zeigt, ist korrekt. Aber es endet mit einem "Error", der innerhalb der Druckerqueue angezeigt wird. In meiner Applikation bekomme ich davon nichts mit. Das erzeugte PDF lässt sich problemlos drucken.
Letztlich macht mein Code genau dies:
Code:
var
SrcRect, DestRect: TRectF;
begin
{ Set the default DPI for the printer. The SelectDPI routine defaults
to the closest available resolution as reported by the driver. }
Printer.ActivePrinter.SelectDPI(1200, 1200);
{ Start printing. }
Printer.BeginDoc;
if Printer.Canvas.BeginScene then
try
{ Set canvas filling style. }
Printer.Canvas.Fill.Color := claBlack;
Printer.Canvas.Fill.Kind := TBrushKind.Solid;
{ Set the Source and Destination TRects. }
SrcRect := Image1.LocalRect;
DestRect := TRectF.Create(0, 0, Printer.PageWidth, Printer.PageHeight);
{ Print the picture on all the surfaces of the page and all opaque. }
Printer.Canvas.DrawBitmap(Image1.Bitmap, SrcRect, DestRect, 1);
finally
Printer.Canvas.EndScene;
end;
{ Finish printing job. }
Printer.EndDoc;
end;
Der Codeschnipsel stammt hierher:
https://docwiki.embarcadero.com/RADS...ey_Application
"Image1" ist bei mir das TBitmap, das ich vorher von meiner Grafik angefertigt habe. Das hat die Größe des Fensters (ca. 1000x600). Es ist ok, lässt sich speichern und ansehen.
Nun nutze ich TPrinter zum ersten Mal und kann nicht ausschließen, dass ich Parameter falsch setze.
Ich habe auch noch nicht herausgefunden, wie man den druckbaren Bereich ermittelt - denn mit Printer.PageWidth und Printer.PageHeight bekommt man die physische Seitengröße und nicht den tatsächlich bedruckbaren Bereich.
Weiß jemand, was ich falsch mache?
Beste Grüße
JL7