Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by ralfiii,
1. Feb 2016
Windows spielt auch dran rum, das ist ja das Fiese.
Ab 150% scaling kommt's zu einer sogenannten dpi-Virtualisierung.
(ausser man macht die Anwendung dpi-Aware, aber dann muss man ZIEMLICH viel nacharbeiten, uA bei etlichen 3rd Party Komponenten, und das will ich nun wirklich nicht)
Bisher wusste ich nicht, wie ich feststellen kann, um welchen Faktor Windows heimlich herum skaliert.
Jetzt...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by ralfiii,
1. Feb 2016
Ahso das!
Nein, nachdem die Druckroutinen zu einem riesen Teil identisch mit den Routinen für den Bildschirm sind haben wir da nix verstellt, kein MapMode etc.
Wie gesagt, wir bestimmen die dpi und scalen selbst.
Auf Beamern muss man's anders machen (eh klar, da gibt's uU kein HorzSize), da fragen wir getDeviceCaps(Can.handle, LOGPIXELSX)/25.4 ab.
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by ralfiii,
1. Feb 2016
Wie meinst du, in was für Einheiten?
Wir bestimmen die Auflösung in Pixel pro Millimeter (einfach mit GetDeviceCaps(Can.Handle, HORZRES) / GetDeviceCaps(Can.Handle, HORZSIZE)
Und dann skalieren wir die Grafik entsprechend. Wir drucken sozusagen in Millimetern. Via Pixel. Äh...
Aber ab 150% Scaling kommt bei Windows offensichtlich eine dpi-Virtualisierung dazu.
Erster Schritt Richtung...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by ralfiii,
28. Jan 2016
Hallo!
Ich bin hier über einen seltsamen Bug gestolpert.
Siehe angehängte Anwendung.
Solange das Windows-Bildschirm-scaling kleiner als 150% ist (das "verstellt" die dpi), druckt die Anwendung einfach ein Kreuz gestretcht auf das Blatt des Druckers.
Sobald 150% oder mehr eingestellt ist (-> 144 oder mehr dpi), wird das Metafile nicht mehr richtig vergrössert, die Grafik füllt nur mehr einen...