Probleme mit unterschiedlichen Bildschirm Auflösungen /DPI Trouble

Für Fragen rund um die Ide und zum Debugger
Antworten
charlytango
Beiträge: 842
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Probleme mit unterschiedlichen Bildschirm Auflösungen /DPI Trouble

Beitrag von charlytango »

hi,

habe eine Applikation mit einigen Fenstern erstellt, auf einem Monitor mit 1980x1080.
alles klar, funktioniert.

Nun bin ich wieder mal an meinen eigentlichen Arbeitsplatzrechner gekommen und der hat wesentlich höhere Auflösung. irgendwas mit 4k.

einmal geöffnet, etwas im Code angepasst und kompiliert. Die Fenster sahen gequetscht und verzogen aus - mini-icons und alle Proportionen unbrauchbar.

Nun wieder retour am Ausgangsrechner und dann hab ich dieses Ergebnis:
Screenshot 2021-04-29 175310.png
Screenshot 2021-04-29 175310.png (24.03 KiB) 2313 mal betrachtet
in der IDE sieht es ziemlich normal aus (das war auf dem hochauflösenden Monitor auch anders)
Screenshot 2021-04-29 175357.png
Screenshot 2021-04-29 175357.png (16.59 KiB) 2313 mal betrachtet
Einstellungen:
Screenshot 2021-04-29 175457.png
Screenshot 2021-04-29 175457.png (9.26 KiB) 2313 mal betrachtet

was mache ich falsch ?

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

Re: Probleme mit unterschiedlichen Bildschirm Auflösungen /DPI Trouble

Beitrag von wp_xyz »

Neben den Einstellungen in den Projekt-Optionen, die du im Screenshot gezeigt hast (und die richtig sind), gibt es noch die Eigenschaft "Scaled" des Formulars (muss true sein) und die Einstellung unter "Werkzeuge" > "Einstellungen" > "Umgebung" > "Formulareditor" > Box "Verschiedenes": da muss "Force DPI Scaling in design-time" markiert sein. Das müsste alles per default richtig eingestellt sein, aber vielleicht hat sich da was eingeschlichen.

Für das LCL-Scaling ist die Auflösung des Monitors als solche egal. Was eingeht, ist die Pixeldichte (pixels per inch, PPI). Was sind die PPI der beiden verwendeten Monitore?

Ach ja das noch: Was ist deine Lazarus-Version? Ich meine mich zu erinnern, dass die richtige Skalierung des DefaultFonts (Size = 0) erst in Trunk eingeführt wurde. Falls du mit Laz 2.0.12 oder älter arbeitest, setze die Font-Größe des Formulars mal auf einen vernünftigen Wert > 0, also etwa 9 oder 10. Wegen ParentFont=true sollte sich das bis in alle Controls hinein auswirken. Skaliert das Formular auf beiden Monitoren nun richtig?

aro
Beiträge: 130
Registriert: Di 26. Jul 2011, 19:58
OS, Lazarus, FPC: Deepin 20.2; Lazarus 2.0.0 + dfsg-2
CPU-Target: 64Bit

Re: Probleme mit unterschiedlichen Bildschirm Auflösungen /DPI Trouble

Beitrag von aro »

Hallo,

ich hatte mal die gleichen Probleme. Besonders schlimm wird es, wenn man auf einem Rechner mit einem Monitor 16:9 entwickelt und das Programm dann auf einem Monitor mit anderem Seitenverhältnis laufen lässt. Grundvoraussetzung für eine automatisch Skalierung ist, das gleiche Seitenverhältnis auf allen Monitoren. Ggf überwachen und anpassen.
Außerdem kannst Du bei einem Stringgrid die Spaltenbreite angegeben werden. Ich glaube nicht , das die Spaltenbreite mit skaliert wird. Wenn aber sie Schriftgröße skaliert wird, passen die Inhalte nicht mehr in die Felder.

charlytango
Beiträge: 842
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Probleme mit unterschiedlichen Bildschirm Auflösungen /DPI Trouble

Beitrag von charlytango »

wp_xyz hat geschrieben:
Do 29. Apr 2021, 18:21
Skaliert das Formular auf beiden Monitoren nun richtig?
Laz 2.0.13 (Fixes 2.0, FPC fixes 3.2)

ich muss mir die Sache nochmal ansehen - coronabedingt bin ich nicht immer am großen Monitor und muss mit dem kleinen Vorlieb nehmen -- WAF-Faktor (!)

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

Re: Probleme mit unterschiedlichen Bildschirm Auflösungen /DPI Trouble

Beitrag von wp_xyz »

aro hat geschrieben:
Fr 30. Apr 2021, 14:43
ich hatte mal die gleichen Probleme. Besonders schlimm wird es, wenn man auf einem Rechner mit einem Monitor 16:9 entwickelt und das Programm dann auf einem Monitor mit anderem Seitenverhältnis laufen lässt. Grundvoraussetzung für eine automatisch Skalierung ist, das gleiche Seitenverhältnis auf allen Monitoren. Ggf überwachen und anpassen.
Außerdem kannst Du bei einem Stringgrid die Spaltenbreite angegeben werden. Ich glaube nicht , das die Spaltenbreite mit skaliert wird. Wenn aber sie Schriftgröße skaliert wird, passen die Inhalte nicht mehr in die Felder.
Wiegesagt, ich bin davon überzeugt, dass die Monitorgröße und auch sein Aspektverhältnis nichts mit LCLScaling zu tun haben. Da gehen nur die Pixel-per-inch ein. Wenn du an einem "großen" Monitor mit 192ppi (200%) entwickelst, und das Programm dann auf einem "kleinen" Monitor mit 96ppi laufen lässt, werden alle Längen um den Faktor 2 heruntergerechnet, auch die Schriften, und das Ergebnis sieht wieder genauso aus, nur halb so groß.

Ein Problem, das ich mir bei der Änderung des Aspektverhältnisses vorstellen könnte, ist dass die Pixel nicht mehr quadratisch sind. In diesem Fall hat man unterschiedliche PPI-Werte für die Horizontale und die Vertikale. Das LCL-Scaling verwendet zwar intern diese beiden Skalierungsfaktoren getrennt, aber manchmal sind Properties so beschaffen, dass man nicht weiß, ob man die horizontale oder vertikale Skalierung anwenden muss ("Margin"), und manche bezüglich LCLScaling nicht sauber programmierte Komponenten verwenden nur einen einzigen PPI-Wert.

Manchmal hat man allerdings durch Rundungsfehler oder nicht proportional skalierte Komponentenbestandteile trotzdem Überschneidungen. Aus diesem Grund sollte man LCL-Scaling Anwendungen wie Cross-Platform-Anwendungen betrachten und konsequent mit dem Anker-Editor und Auto-Sizing layouten.

aro
Beiträge: 130
Registriert: Di 26. Jul 2011, 19:58
OS, Lazarus, FPC: Deepin 20.2; Lazarus 2.0.0 + dfsg-2
CPU-Target: 64Bit

Re: Probleme mit unterschiedlichen Bildschirm Auflösungen /DPI Trouble

Beitrag von aro »

Hallo,

das Problem besteht nur bei unterschiedlichen Verhältnissen zwischen Breite und Höhe!

Die Höhe der Felder und die Schrift werden nach der neuen Höhe skaliert. Breite der Felder werden nach der Breite des Bildschirms skaliert. Wenn die Breite sich nicht im gleichen Verhältnis ändert, passt die größere Schrift nicht in die Felder!

Wenn die Breite der Felder erst im Programm und durch das Programm angegeben wird, muss dieser Wert vor der Übergabe natürlich ebenfalls neu berechnet werden.

Antworten