Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle (https://www.delphipraxis.net/188199-high-dpi-problem-mit-checkbox-radiobox-delphi10seattle.html)

user69 8. Feb 2016 21:25

High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle
 
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo,

Wenn man in Delphi10Seattle in Windows10 perMonitorDPI nutzt und eine Form mit Radiobuttons oder Checkboxen von Monitor1 (System DPI = 150%) auf den Monitor 2 (100 % DPI) verschiebt wird die Form ok skaliert. Leider werden dabei aber die Radiobuttons oder Checkboxen bei den 100% DPI oben abgeschnitten.
Siehe: SystemDPI144-Monitor2DPI100.png

Config2 - Monitor 1 wird auf 100% gesetzt (System DPI), Monitor 2 hat 150% scale:
Das ganze wird perfekt gezeichnet /skaliert, wenn man das Programm von Monitor 1 (System DPI = 100%) auf Monitor 2 (150% DPI) bewegt.
Siehe: SystemDPI100-Monitor2DPI144.png

Anbei auch der Source - Delphi10Seattle wird benötigt.

BTW:
Ich habe in der FormCreate - PixelsPerInch:= Monitor.PixelsPerInch ; gesetzt, um dem Bug von Delphi10Seattle Update1 zu umgehen.
Das Delphi Programm wurde unter 96 DPI erstellt.

Hat jemand eine Lösung, wie man die Checkboxen/Radioboxen korrekt zeichnen kann - also nicht abgeschnitten?
Evtl. irgendeine Delphi Source editieren - Vcl.Controls?

User69

user69 10. Feb 2016 08:03

AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle
 
Hm, da hier keiner antwortet, scheint mir, dass noch nicht sehr viele mit High DPI in Delphi arbeiten.

Ich versuchst mal anders:
Kann mir jemand sagen, wie (und wo, welche Unit, Zeile) die Checkboxen in Delphi 10 genau gezeichnet werden. Das konnte ich irgendwie trotz längerer Suche noch nicht verstehen. Ich nutze die normalen Runtime Styles von Windows 10.
Evtl kann ich dort ansetzen und was umschreiben.

User69

Memnarch 10. Feb 2016 08:39

AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle
 
Warnung! Ich kenne mich mit der VCL im aktuellen Delphi nicht aus!
Sollte sich aber nichts geändert haben, werden die Checkboxen wie immer von Windows selber gezeichnet. Deswegen wirst du den source nicht finden, weils den nicht gibt ;)
(Natürlich gibt es da noch den SKin/ThemeManager in Delphi aber wie sich das verhält weiß ich nicht)

Weißt sich die Anwendung im Manifest eigentlich auch als MonitorDPI-Aware aus?

user69 10. Feb 2016 08:44

AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle
 
OK, das erklärt, warum ich nichts rechtes gefunden habe.
Aber wo sind denn die Size-Berechnungen - die muss man Windows ja wenigstens mitteilen.
Mit scheint irgendwie die Größe der Checkbox selbst (nicht des Fonts) nicht zu stimmen.

User

Memnarch 10. Feb 2016 08:51

AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle
 
Warnung Halbwissen
Ich kann mir nicht vorstellen, dass Windows die DPI-Zahl nicht bewusst ist. Es weiß ja wieviel DPI auf welchem Monitor gegeben sind. Vllt schießt da noch etwas anderes quer?

user69 11. Feb 2016 09:40

AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle
 
Also nach einigem Probieren scheinen mir die Checkboxen und Radiobuttons zu groß zu sein, wenn die System DPI größer als 100% ist.

Bspl: System DPI 150% und auf dem 2. Monitor nur 100% (Programm perMonnitorDPI Aware). Die Größe der Checkboxen (reine Graphik) ist dabei dann zu groß und im „Normalfall“ oben abgeschnitten.

Ein Workaround, scheint zu sein, dass alle Checkboxen und Radioboxen eine Height = 20 erhalten (Standard ist 17). Dann werden sie nicht mehr abgeschnitten (zumindest bei 150% und 175% System DPI nicht – mehr hab ich noch nicht testen können). Die Größe ist dann aber immer noch größer als wenn die System DPI 100% wäre (unschön aber geht wohl nicht anders).

User69

user69 12. Feb 2016 14:13

AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle
 
OK, nach längerem test nun das ernüchternde Ergebnis: Delphi Zeichnet die Checkbox und Radiobox Images immer in der Größer der SystemDPI. Das betrifft nur das Image - nicht den text.

Wenn sich also eine App als per MonitorDPI Aware ausweist ist die Größer dieser Boxen auf Monitoren mit MinitorDPI immer Falsch.
Das führt so weit, dass z.b. bei 250% System DPI die Checkbox oder Radiobox auf einem 100% DPI 2 Monitor gar nicht mehr erkenntlich ist.

Kennt jemand eine Workaround?

Wie kann man per eigenen Code in das Zeichen eingreifen, ohne eine externe Komponente zu nutzen?

User69

HeZa 12. Feb 2016 15:13

AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle
 
Use the source Luke ähm User69. Da Du ja schon die Stellen gefunden hast wo falsch gezeichnet wird, mache es besser: :-D

Mache deine eigenen Komponenten.
Leite von TCheckBox bzw. TRadioButton ab und überschreibe die Methoden die den Fehler enthalten mit einer korrigierten Fassung.

Funktioniert überschreiben nicht, dann kopiere jeweils den ganzen Quellcode der Komponente, vergib neue Namen und korrigiere die fehlerhaften Stellen.

Den Source von allen Komponenten zu haben, ist mit die beste Eigenschaft von Delphi.

user69 12. Feb 2016 15:23

AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle
 
Genau da liegt mein Problem.
Ich kann den Source vom Zeichen der CheckBox nicht recht finden oder verstehen.

Sicher muss ich irgendwie Paint überschreiben, aber wie und an welcher stelle.
Wie hier schon gesagt wird macht das wohl Windows, und ich kann daher schlecht rausfinden, was Delphi Windows da falsch gibt.

Hast du Konkrete Ideen, wo ich das Paint finde?

Ingo

MEissing 12. Feb 2016 16:36

AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle
 
https://connect.microsoft.com/Visual...pi-scaling-set

Auch andere haben damit Probleme....

hoika 12. Feb 2016 16:46

AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle
 
Hallo,
also ich habe hier D2007 und XE4, da wird die CheckBox richtig (gross) dargestellt.
Ist das ein Seattle-Problem?

OK: Steht ja alles in #1 ... ;)


Heiko

Bernhard Geyer 12. Feb 2016 16:52

AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle
 
Zitat:

Zitat von MEissing (Beitrag 1330196)
https://connect.microsoft.com/Visual...pi-scaling-set

Auch andere haben damit Probleme....

Und machen sich mit der Lösung beliebt:

Zitat:

Closed as Won't Fix

user69 12. Feb 2016 19:12

AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle
 
PerMonitorDPI Awareness ist wichtig, um das Problem zu sehen. Da das erst ab Delphi10Seattle geht (oder gehen soll) ist es in XE4 sicher nicht so recht nachstellbar.

Auch der Link beschreibt durchaus ein anderes Problem und hilft selbst dabei nicht weiter ;-( .

Ich habs nun auch bei Emba mal als RSP eingestellt.

User69

Sir Rufo 12. Feb 2016 20:12

AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle
 
Schrift ...: 8px bei 96dpi => 12px bei 144dpi Berechnung: 8 * 144 / 96 = 12
Schrift ...: 12px bei 144dpi => 8px bei 96dpi Berechnung: 12 * 96 / 144 = 8

Radiobutton: 13px bei 96dpi => 13px bei 144dpi Berechnung: 13 = 13
Radiobutton: 20px bei 144dpi => 16px bei 96dpi Berechnung: 20 - trunc( 42 / 10 ) = 16

Es ist eben ein unlösbares Problem (weil man sonst die Antwort auf die Frage herausnehmen müsste und dafür haben die Mäuse schliesslich bezahlt)

user69 12. Feb 2016 20:51

AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle
 
Also da kann ich jetzt nicht folgen. Die Berechnung für den Radiobutton verstehe ich gar nicht.

Und warum sollte es unlösbar sein?
Es muss "nur" die Graphic des Radiobuttons richtig in der Größe gezeichnet werden (das macht jedes gute Programm). Und die kann ja eigentlich auch gut berechnet werden - jedoch nimmt wohl Delphi da irgendwie immer die Windowseinstellungen für die SystemDPI (egal ob ein Programm Monitor DPI aware ist).
Und solange keine PerMonitorDPI im Spiel ist, stimmt es auch in Delphi, da ja Windows dann virtualisiert.

User69

Sir Rufo 12. Feb 2016 20:55

AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle
 
Ich dachte mit dieser Gegenüberstellung hätte ich die Ironie schon klar zum Ausdruck gebracht.

Nein, diese Berechnung (da wird nichts berechnet) verstehe ich auch nicht ;)

Und die Berechnung von 144dpi auf 96dpi verstehe ich auch nicht.

Also bleibt nur eine eigene Komponente und selber zeichnen.

user69 15. Feb 2016 17:25

AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle
 
Ja, es wird wohl auf eine "Eigene" zumindest nicht Delphi native Komponente hinauslaufen.
Echt ärgerlich.

es ist nun bei Emba geloggt : RSP-13712

Wär schön, wenn es auch gevotet würde, damit die Komponenten auch bald wieder nutzbar sind.

User69

hoika 20. Feb 2016 07:00

AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle
 
Hm,
was ich nicht verstehe.
Warum kann man das nicht benutzen.
Es geht um 2 Monitore und noch mit verschiedener Auflösung.
Wer hat das schon (OK, ich auf Arbeit :) j

Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:15 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz