Schriftgröße anhand von Breite, Höhe (und DPI) berechnen

  • Hallo zusammen,

    der Titel erklärt mein Problem eigentlich schon. Ich mache mir schon seit Längerem Gedanken, wie man z.B. anhand von festen Maßen eines Labels die Schriftgröße so berechnen kann, dass der Text auf jedem PC mit unterschiedlichen Auflösungen gleich angezeigt wird. (Geht das irgendwie mit _GDIPlus_MeasureString im Rückwärtsmodus oder so?)

    Vielen Dank schonmal.

    NO1 :)

  • Und die wäre...

    _GDIPlus_GraphicsMeasureString war schon richtig.

    Du kannst doch die DPI Einstellung auslesen und die Schriftarten dementsprechend hochrechnen oder nicht?
    Wenn du standardmäßig FontSize 8 hast und bei DPI 150% (jetzt einfach so aus den Haaren gezogen) FontSize 14, dann kannst du ja einen Skalierfaktor einbauen.

    Dann seztt du die FontSize passend zur DPI.

    • Offizieller Beitrag

    Da ich das gerade bei meinem Spiel einsetze, kann ich Dir zeigen, wie ich das umgesetzt habe.
    Am Anfang die eingestellte DPI-Größe aus der Registry auslesen:
    $iAppDPI = RegRead('HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics', 'AppliedDPI')
    und dann bei den Label die Schriftgröße entsprechend skalieren:
    GUICtrlSetFont(-1, 10 / $iAppDPI * 96, 400, 0, 'Verdana')
    So bleibt die Schriftgröße ungefähr so groß, wie bei der Standard-DPI-Einstellung von 96.

  • Vielen Dank für Eure antworten.


    @alpines: _GDIPlus_GraphicsMeasureString macht genau das Gegenteil. Aus einer Font(Family) das Rect (also Width und Height ausrechnen)@''Oscar'': Das schaut ganz logisch aus, werde es gleich testen. Glaub ich habs schon mal so probiert und es hat nicht funktioniert, aber es mal testen.

    MfG NO1 :)

  • Glaub ich habs schon mal so probiert und es hat nicht funktioniert, aber es mal testen.

    Hallo @'NO1 :)

    Zum Thema 'Skalierung' hatte ich vor kurzem einen Beitrag in einem anderen Thread gepostet.
    Ich zitiere mich hier daher mal selbst ^^ :


    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Danke, hab's ausgetestet. Funktioniert auch, jedoch sollen ja Breite und Höhe mit einbezogen werden, denn je nach Bildschirmauflösung und Resizen werden die Controls ja größenverändert.

    Das obrige Problem mit den DPI hab ich mit GDIPlus lösen können, ich freu mich aber über weitere Antworten.
    Unten das Skript, falls es jmd brauchen kann (es wird die Schriftgröße in Pixel angegeben.)

  • Schau mal ob du hiermit etwas anfangen kannst...

    ReSizeCtrl_Demo
  • Danke für deine Antwort, ich denke aber, dass ihr mein Problem nicht richtig verstanden habt (vielleicht hab ich's auch einfach nur schlecht beschrieben).

    1. Width und Height von GUI und Controls werden abhängig von @DesktopWidth/@DesktopHeight berechnet.
    2. Die GUI/Controls werden mit diesen Größen erstellt.
    3. Die Maße der Controls werden nicht verändert, bei Labels muss z.B. die Schriftgröße so angepasst werden, dass der ganze Text erkennbar ist.

    Problem.PNG