"Lesbarkeit auf dem Bildschirm erleichtern" zerstört meine GUI

  • Hallo zusammen.

    Ich habe folgendes Problem: Wenn ein User diese Einstellung hier auf einen anderen Wert als 100% einstellt, ist meine GUI vollkommen hinüber:
    [Blockierte Grafik: http://i.imgur.com/phLQy5A.png]

    Lässt sich das irgendwie verhindern, dass diese Einstellung für meine GUI greift? Oder lässt sich mit halbwegs einfachen Mitteln bewerkstelligen, dass sich alles an meiner GUI daran anpasst?

    Danke euch schonmal und LG,
    Weisgarnix

  • Vielen Dank euch beiden! Im Großen und Ganzen klappts damit!
    Zwei Kleinigkeiten habe ich aber noch: Wie kann ich nun ein einzelnes Label z.B. unterstrichen darstellen oder fett?
    Wende ich GUICtrlSetFont an, muss ich eine Größe angeben und diese Controls werden dann vom GDI-Workaround nicht mehr erfasst :(

    Danke euch und LG,
    Weisgarnix

    *Edit*: Ich versuche es momentan als alternativen Lösungsansatz, Die Manifest-Daten per ResourceHacker anzupassen, allerdings passiert da rein gar nix. Bin ich auch zu blöd für :(

    Einmal editiert, zuletzt von Weisgarnix (21. Oktober 2016 um 08:36)

  • Ähm hast du dir die Beispielscripte aus dem Link von UEZ angeschaut? Die dort verwendete Funktion _GDIPlus_GraphicsGetDPIRatio() Gibt dir das abweichende Verhältnis der DPI zum Standardwert. Damit kannst du die korrekte Schriftgröße wie im Beispiel berechnen.

    Solltest du also neben der Standard GUI Schriftgröße noch weitere vom Standard abweichende Controls nutzen dann verwende dort eben ebenfalls den ermittelten DPI Abweichungsfaktor.

  • Hier mal meine Version von GetDPI()...

    GetDPI-DEMO
    GetDPI
  • @gmmg

    Deine Antwort ist allgemein betrachtet natürlich vollkommen korrekt, sie bezieht sie allerdings nicht mal ansatzweise auf die von @Weissgarnix angeführte Problemstellung...

    Wende ich GUICtrlSetFont an, muss ich eine Größe angeben und diese Controls werden dann vom GDI-Workaround nicht mehr erfasst

  • @Bitnugger

    es gibt drei Prozentuale Größen, einfach hier für jeden Wert eine entsprechende Variable setzen.
    Den derzeitigen WERT kann man in der Registry auslesen (HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics)

    Wobei in der Hilfe bei GUICtrlSetFont unter $DRAFT_QUALITY (1) noch folgendes steht.

    $DRAFT_QUALITY (1) = Appearance of the font is less important than when$PROOF_QUALITY is used.
    For GDI raster fonts, scaling is enabled, which meansthat more font sizes are available, but the quality may be lower. Bold, italic, underline, and strikeout fonts are synthesized if necessary.


    Gruß gmmg :)

    Einmal editiert, zuletzt von gmmg (25. Oktober 2016 um 08:00)

  • Ähm hast du dir die Beispielscripte aus dem Link von UEZ angeschaut? Die dort verwendete Funktion _GDIPlus_GraphicsGetDPIRatio() Gibt dir das abweichende Verhältnis der DPI zum Standardwert. Damit kannst du die korrekte Schriftgröße wie im Beispiel berechnen.

    Solltest du also neben der Standard GUI Schriftgröße noch weitere vom Standard abweichende Controls nutzen dann verwende dort eben ebenfalls den ermittelten DPI Abweichungsfaktor.

    Das dachte ich mir auch, habs aber nicht hinbekommen :(

    *Edit*: Habs doch noch hinbekommen: Search and Replace GUICtrlSetFont(-1, 12, mit GUICtrlSetFont(-1, 12 * _GDIPlus_GraphicsGetDPIRatio()[0], hat halbwegs funktioniert. Warum halbwegs? Das "Fett" sieht anders aus und ein ganz kleines Bisschen passts von der Skalierung nicht, aber ich habe die entsprechenden Labels um wenige Pixel länger gemacht, nun passt alles - dass das Fette anders ausschaut, ist mir egal.
    GUISetFont($MainForm, 12.0 * _GDIPlus_GraphicsGetDPIRatio()[0]) verwende ich nun gar nicht mehr, sondern mache es überall über GUICtrlSetFont(-1, 12 * _GDIPlus_GraphicsGetDPIRatio()[0], ...

    Hier mal meine Version von GetDPI()...

    Deine Demo funktioniert bei normaler DPI gut, bei 125% sieht die GUI aber wie folgt aus:

    Spoiler anzeigen


    Das ist ja aber genau, was ich zu verhindern versuche, dass die Texte bei anderer DPI-Einstellungen nicht mehr richtig/vollständig angezeigt werden.

    3 Mal editiert, zuletzt von Weisgarnix (25. Oktober 2016 um 11:31) aus folgendem Grund: Siehe *Edit*

  • Das "Fett" sieht anders aus und ein ganz kleines Bisschen passts von der Skalierung nicht

    Nunja da fette Schrift allgemein eine Auswirkung auf das Schriftbild hat (Buchstaben benötigen mehr Pixel und werden dadurch breiter und evtl. höher) würde ich den DPI Korrekturfaktor eben auch auf den "Fett"-Grad anwenden. Kannst das ja mal testen. Achja und anstatt permanent diese DPI Funktion aufzurufen würde ich den Korrekturfaktor einfach nur einmal am Scriptanfang ermitteln, in einer Variable speichern und später dann zur Berechnung der jeweiligen Schriftgröße oder Schriftdicke nutzen.