Kann man High DPI simulieren?

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Benutzeravatar
theo
Beiträge: 10500
Registriert: Mo 11. Sep 2006, 19:01

Kann man High DPI simulieren?

Beitrag von theo »

In letzter Zeit wird häufiger das Problemfeld High DPI erwähnt.
Braucht man zwingend einen physischen Bildschirm um Anwendungen/Layouts in diesem Modus zu testen, oder gibt es einen Trick?
Einfach nur um die Verhältnisse wie Fontgrössen etc. zu überprüfen, es müsste ja nicht wirklich "bedienbar" sein.
Ich möchte mir eigentlich keinen neuen Bildschirm kaufen, aber trotzdem meine Anwendungen möglichst kompatibel machen.
Ich finde es immer schwierig und unbefriedigend, Probleme zu lösen, die man nicht hat/sieht.

Benutzeravatar
Ally
Beiträge: 263
Registriert: Do 11. Jun 2009, 09:25
OS, Lazarus, FPC: Win und Lazarus Stable release
CPU-Target: x64

Re: Kann man High DPI simulieren?

Beitrag von Ally »

Unter Windows 11:

Start - Einstellungen - System - Bilschirm - Skalierung

steht normalerweise auf 100% - wenn man das auf, z.B. 150%, umstellt kann man schon mal sehen ob alles passt.

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

Re: Kann man High DPI simulieren?

Beitrag von theo »

OK, Danke!
Das schaue ich mir später mal an.

wp_xyz
Beiträge: 4895
Registriert: Fr 8. Apr 2011, 09:01

Re: Kann man High DPI simulieren?

Beitrag von wp_xyz »

Ich habe mehrere Virtuelle Maschinen auf dem PC, darunter auch eine mit Windows 7/150% (144ppi). Und da mir das Laden der VM unter VirtualBox manchmal zu lange dauert, habe ich auf meiner normalen Arbeitsumgebung (WIn-11) einen zweiten User mit 144ppi eingerichtet. Die Umschaltung geht aber auch nicht ganz ideal, weil man sich jeweils als der andere User einloggen muss. Auf der laufenden Arbeitsumgebung die Auflösung umzustellen ist, wenn ich mich recht erinnere, nicht ratsam, weil das die Icon-Anordnung auf dem Desktop durcheinanderbringt.

Ein zweiter Monitor hätte den Vorteil, dass man testen kann, ob sich die Skalierung richtig anpasst, wenn man das Formular auf den anderen Monitor mit anderer Auflösung zieht.

In OpenSUSE habe ich eben einen Regler für "Globale Skalierung" gesehen. Bin nicht sicher, ob das dasselbe ist wie die LCL-Skalierung, die von der IDE unterstützt wird. LCL-Skalierung meint die Anpassung der Längendimensionen, wenn sich die Pixeldichte ändert, also die Anzahl der horizontalen und vertikalen Pixel des Monitors. Unter Windows gibt es noch eine andere Art von Skalierung (irgendwo unter Barrierefreiheit > Textgröße) - da werden die Textgrößen und Control-Größen mit dem Faktor multipliziert, aber nicht unbedingt ihre Positionen, und Icons bleiben auch außen vor. Das wird mit LCLScaling nicht behandelt, und man kann (bis auf die Icons) kompatible Anwendungen nur so erstellen, dass man die Controls aneinander verankert. Von welchem Typ die "Globale Skalierung von OpenSUSE ist, weiß ich nicht.

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

Re: Kann man High DPI simulieren?

Beitrag von theo »

VBox ist schon mal eine gute Idee. Ich hab ja noch ein Tubleweed parat.
Auch VBox bietet einen "Virtuellen Monitor".
Ich werde später noch schauen, was das genau macht. Muss noch kurz weg.
Dateianhänge
vboxvirt.png
vboxvirt.png (112.63 KiB) 2907 mal betrachtet

Benutzeravatar
Ally
Beiträge: 263
Registriert: Do 11. Jun 2009, 09:25
OS, Lazarus, FPC: Win und Lazarus Stable release
CPU-Target: x64

Re: Kann man High DPI simulieren?

Beitrag von Ally »

Hallo wp_xyz,
Auf der laufenden Arbeitsumgebung die Auflösung umzustellen ist, wenn ich mich recht erinnere, nicht ratsam, weil das die Icon-Anordnung auf dem Desktop durcheinanderbringt.
Ja, genau. Jetzt wo du es sagst, erinnere ich mich auch dunkel daran.
Ich habe deshalb immer meinen Laptop angeworfen, der hat eine höhere Auflösung.
Bevor ich Theo geantwortet habe, habe ich das Ganze noch mal getestet und siehe da - die Icons auf dem Desktop werden beim Zurückstellen auf 100% wieder richtig angeordnet.
Wie lange das schon so ist kann ich nicht sagen. Aktuell habe ich Windows 11 Version 23H2.

wp_xyz
Beiträge: 4895
Registriert: Fr 8. Apr 2011, 09:01

Re: Kann man High DPI simulieren?

Beitrag von wp_xyz »

Jetzt verwende ich VirtualBox schon so lang, und das habe ich noch nie gesehen... Aber dennoch: Ich denke, das ist nicht das richtige, denn wenn man das anwendet, wird alles zwar vergrößert, abert etwas unscharf. Beim "echten" LCL-Skaling wird aber alles in der neuen Auflösung neu gezeichnet.

Ich habe dann unter OpenSUSE auch "Einstellungen" > "Systemeinstellungen" > "Hardware" > "Anzeige und Monitor" > "globale Skalierung" den Wert von 100 auf 150% hochgesetzt und eine kleines Laz-Programm kompiliert. Wenn ich dann die Auflösung wieder auf 100% zurückstelle, sieht das Formular richtig aus, wenn LCLScaling in den Projekt-Settings markiert ist, jedoch falsch, wenn LCLScaling nicht markiert ist.

Aber Achtung: Beide Möglichkeiten haben bei mir die Fenster-Anordnung der floatenden IDE zerschossen.

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

Re: Kann man High DPI simulieren?

Beitrag von theo »

OK, Habe mal das mit den KDE Einstellungen probiert (150%).
Lustig ist schon mal, dass nur neu gestartete Anwendungen betroffen sind.
Das könnte man als Bug sehen, ist aber im Moment eigentlich ganz praktisch.
Der Desktop bleibt normal und Lazarus wird zum Monster (Bild 2).

Dann habe ich mal im 150% Modus einen kleinen Test gemacht.
Einmal mit und einmal ohne LCLScaling kompiliert.
Dann die beiden Exes im 100% Modus gestartet und ja, da ist ein Unterschied (Bild1)
Oben mit Scaling und unten ohne.
Es ist schon mal gut, dass es was tut.
Nur... was lerne ich jetzt daraus? LCLScaling einschalten reicht?
Dateianhänge
LCLScaling.png
LCLScaling.png (33.92 KiB) 2882 mal betrachtet
KDE150.png
KDE150.png (132.78 KiB) 2882 mal betrachtet

wp_xyz
Beiträge: 4895
Registriert: Fr 8. Apr 2011, 09:01

Re: Kann man High DPI simulieren?

Beitrag von wp_xyz »

theo hat geschrieben:
So 19. Nov 2023, 14:43
Nur... was lerne ich jetzt daraus? LCLScaling einschalten reicht?
Ja. Nur wenn du eigene Komponenten schreibst, musst du dafür sorgen, dass die "inneren" Dimensionen (Abstände, Ränder, ...) skaliert werden. Ansonsten, auf der Anwendungsebene reicht es, gar nichts zu tun, denn LCLScaling ist standarmäßig aktiv, d.h. LCL macht alles automatisch. (Es sei denn, du verwendest Komponenten, die nicht LCLScaling nicht kennen).

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

Re: Kann man High DPI simulieren?

Beitrag von theo »

OK! Danke!
Gut, dass man für das grundsätzliche Phänomen nicht unbedingt einen anderen Monitor benötigt.
Für die letzte Sicherheit (Icon Grössen/Auflösungen etc.) aber wahrscheinlich doch?

wp_xyz
Beiträge: 4895
Registriert: Fr 8. Apr 2011, 09:01

Re: Kann man High DPI simulieren?

Beitrag von wp_xyz »

theo hat geschrieben:
So 19. Nov 2023, 15:22
OK! Danke!
Gut, dass man für das grundsätzliche Phänomen nicht unbedingt einen anderen Monitor benötigt.
Für die letzte Sicherheit (Icon Grössen/Auflösungen etc.) aber wahrscheinlich doch?
Ich hab keinen. Besser wär's natürlich schon, und dann bräuchte ich noch - statt virtueller Maschinen - einen Mac und Notebooks mit diversen Linuxen, und überhaupt bräuchte ich dann noch eine größere Wohnung...

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

Re: Kann man High DPI simulieren?

Beitrag von theo »

wp_xyz hat geschrieben:
So 19. Nov 2023, 16:40
Ich hab keinen. Besser wär's natürlich schon, und dann bräuchte ich noch - statt virtueller Maschinen - einen Mac und Notebooks mit diversen Linuxen, und überhaupt bräuchte ich dann noch eine größere Wohnung...
:lol:
Es müssen noch nicht mal verschiedene Linuxe sein. GTK2 vs Qt5 vs Qt6 gibt schon ausreichend zu kontrollieren.
"Kästchen" (TEdit, TCombobox, TEtc.) sehen vom einem zum anderen System manchmal schon unterschiedlich hoch aus, bzw. haben keine gemeinsame Grundlinie mehr.
Im Prinzip müsste man die alle verknüpfen (Höhe, Grundlinie).

Benutzeravatar
Ally
Beiträge: 263
Registriert: Do 11. Jun 2009, 09:25
OS, Lazarus, FPC: Win und Lazarus Stable release
CPU-Target: x64

Re: Kann man High DPI simulieren?

Beitrag von Ally »

Hallo wp_xyz,
Jetzt verwende ich VirtualBox schon so lang, und das habe ich noch nie gesehen... Aber dennoch: Ich denke, das ist nicht das richtige, denn wenn man das anwendet, wird alles zwar vergrößert, aber etwas unscharf. Beim "echten" LCL-Skaling wird aber alles in der neuen Auflösung neu gezeichnet.
verstehe ich da jetzt etwas falsch oder hat das etwas mit VirtualBox zu tun?

Wenn ich direkt unter Windows, so wie oben beschrieben, die Auflösung ändere, wird zwar alles größer aber nicht unscharf.
Das LCL-Scaling funktioniert wie es soll und aus der Imagelist werden die passenden Icons verwendet.
Natürlich wird alles zu groß dargestellt, aber die Proportionen stimmen.

Mit dem Testprogramm kann man die Einstellungen 100%, 125%, 150%, 175% und 200% überprüfen.

Viele Grüße Roland
Dateianhänge
ResolutionTest.zip
(25.13 KiB) 35-mal heruntergeladen

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

Re: Kann man High DPI simulieren?

Beitrag von theo »

Ally hat geschrieben:
Mo 20. Nov 2023, 10:40
Mit dem Testprogramm kann man die Einstellungen 100%, 125%, 150%, 175% und 200% überprüfen.
Danke für das Beispiel! Funktioniert.
Kannst du noch kurz erklären, wie der Zusammenhang zwischen PPI (Ist DPI nicht eigentlich für den Druck?) und Bildgrösse ist?

Also dein kleinstes Bild ist 20x20px. Könnte es auch 16x16px sein?
Wie entscheidet Lazarus, welche Grösse bei welchen DPI genommen wird?

Mathias
Beiträge: 6210
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Kann man High DPI simulieren?

Beitrag von Mathias »

DPI sind Pixel pro Zoll.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten