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 |
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 |
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? |
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 |
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? |
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 |
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 |
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. |
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 |
AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle
|
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 |
AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle
Zitat:
Zitat:
|
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 |
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) |
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 |
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. |
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 |
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