Printer: Umstellung auf mm-Bemaßung

Rund um die LCL und andere Komponenten
Antworten
lzuser
Beiträge: 97
Registriert: Sa 20. Jun 2009, 16:00
OS, Lazarus, FPC: Win10 20H2, Laz 2.0.8 auch Linux Mint Mate 20, Laz 2.0.6
CPU-Target: 64Bit

Printer: Umstellung auf mm-Bemaßung

Beitrag von lzuser »

Hallo,
Unter Delphi gelang es mir den Printer.Canvas auf mm-Bemaßung umzustellen:

procedure PrinterInitPage;
var PrDC:THandle;
Window,ViewPort:TSize;
begin
PrDC:=Printer.Canvas.Handle;
SetMapMode(PrDC,mm_lometric); {1/10 mm; x nach rechts; y nach oben !}
GetWindowExtEx(PrDC,Window); {Druckerauflösung holen}
GetViewPortExtEx(PrDC,Viewport); {Fenster dafür holen}
SetMapMode(PrDC,mm_anisotropic); {selbst definierbare Maßeinheit setzen}
SetWindowExtEx(PrDC,Window.cx,Window.cy,nil); {Druckerauflösung bestätigen}
SetViewPortExtEx(PrDC,Viewport.cx,-Viewport.cy,nil); {Fenster dafür in y-Richtung umkehren}
end;

Nun könnte ich die Pixelmaße natürlich auch selbst anpassen umd umrechnen, aber so wie ober war das schon bequem.
Da ich neu bin bei Lazarus: Geht das grundsätzlich auch? und wie?
Der Compiler scheitert schon bei SetMapMode...

Vielen Dank für Hilfen.

Benutzeravatar
theo
Beiträge: 10952
Registriert: Mo 11. Sep 2006, 19:01

Re: Printer: Umstellung auf mm-Bemaßung

Beitrag von theo »

Für die Cross-Platform Druckerei wird's so wohl nicht klappen (Bin kein Experte).
Aber du kriegst die Druckerauflösung mit Printer.XDPI, Printer.YDPI. (DPI=Dots per Inch).
Damit kannst du dir eine Funktion basteln, welche mm --> Inch --> Druckpunkte errechnet.

Antworten