AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle
Thema durchsuchen
Ansicht
Themen-Optionen

High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle

Ein Thema von user69 · begonnen am 8. Feb 2016 · letzter Beitrag vom 20. Feb 2016
Antwort Antwort
Seite 1 von 2  1 2      
user69

Registriert seit: 10. Dez 2004
92 Beiträge
 
#1

High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle

  Alt 8. Feb 2016, 21:25
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
Miniaturansicht angehängter Grafiken
systemdpi100-monitor2dpi144.png   systemdpi144-monitor2dpi100.png  
Angehängte Dateien
Dateityp: zip HighDPIForm-Source.zip (96,8 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat
user69

Registriert seit: 10. Dez 2004
92 Beiträge
 
#2

AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle

  Alt 10. Feb 2016, 08:03
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
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#3

AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle

  Alt 10. Feb 2016, 08:39
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?
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden

Geändert von Memnarch (10. Feb 2016 um 08:42 Uhr)
  Mit Zitat antworten Zitat
user69

Registriert seit: 10. Dez 2004
92 Beiträge
 
#4

AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle

  Alt 10. Feb 2016, 08:44
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
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#5

AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle

  Alt 10. Feb 2016, 08:51
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?
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
user69

Registriert seit: 10. Dez 2004
92 Beiträge
 
#6

AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle

  Alt 11. Feb 2016, 09:40
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
  Mit Zitat antworten Zitat
user69

Registriert seit: 10. Dez 2004
92 Beiträge
 
#7

AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle

  Alt 12. Feb 2016, 14:13
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
  Mit Zitat antworten Zitat
HeZa

Registriert seit: 4. Nov 2004
Ort: Dortmund
182 Beiträge
 
Delphi 10 Seattle Professional
 
#8

AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle

  Alt 12. Feb 2016, 15:13
Use the source Luke ähm User69. Da Du ja schon die Stellen gefunden hast wo falsch gezeichnet wird, mache es besser:

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.
  Mit Zitat antworten Zitat
user69

Registriert seit: 10. Dez 2004
92 Beiträge
 
#9

AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle

  Alt 12. Feb 2016, 15:23
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
  Mit Zitat antworten Zitat
Benutzerbild von MEissing
MEissing

Registriert seit: 19. Jan 2005
Ort: Egelsbach
1.384 Beiträge
 
Delphi 12 Athens
 
#10

AW: High DPI Problem mit Checkbox/Radiobox in Delphi10Seattle

  Alt 12. Feb 2016, 16:36
https://connect.microsoft.com/Visual...pi-scaling-set

Auch andere haben damit Probleme....
Matthias Eißing
cu://Matthias.Eißing.de [Embarcadero]
Kein Support per PN
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:38 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