tatsächliche Schriftgröße ermitteln

    • Offizieller Beitrag

    Der Schriftgrad eines Schriftfonts sagt ja nur indirekt etwas über die Schrifthöhe in Pixeln aus.

    Aber gerade wenn ich Controlgrößen festlegen muß, möchte ich natürlich wissen wieviel Platz für verwendete Fonts benötigt wird.

    Mit diesem Programm läßt sich die tatsächliche Pixelhöhe eines Fonts ermitteln.
    Dabei bin ich von der maximal möglichen vertikalen Platzbelegung ausgegangen.
    Es wird die Zeichenfolge 'qÄ' in ein Label einer GUI geschrieben.
    In einer Schleife wird der Schriftgrad in 0.5-er Schritten von Size = 6 bis Size = 28 gesetzt und dann die vertikale Auslenkung gescant.
    Das Ergebnis wird in die Datei: "FontPixelSize.txt" geschrieben.

    Schriftgrad und Font könnt ihr nach Bedarf anpassen.

    Edit: Hab grad bemerkt, dass einige Schriftarten bei kleinem Schriftgrad einen Fehler liefern - entsprechende Fehlerroutine eingebaut.

    Spoiler anzeigen
    [autoit]

    #include <guiconstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Dim $file = @ScriptDir & "\FontPixelSize.txt"
    Dim $sizeMin = 6, $sizeMax = 28
    Dim $font = 'Comic Sans MS'

    [/autoit] [autoit][/autoit] [autoit]

    $gui = GUICreate('', 200, 150, 40, 40)
    $label = GUICtrlCreateLabel('', 0, 0, 200, 130, $SS_CENTERIMAGE)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()
    GUICtrlSetData($label, 'qÄ')
    GUICtrlSetColor($label, 0xFF0000)

    [/autoit] [autoit][/autoit] [autoit]

    $fh = FileOpen($file, 1)
    FileWriteLine($fh, $font)
    FileWriteLine($fh, 'Schriftgrad / Größe in Pixel')
    For $i = $sizeMin To $sizeMax Step 0.5
    GUICtrlSetFont($label, $i, 400, -1, $font)
    Select
    Case ($i <= 10) Or (IsInt($i) = 1)
    FileWriteLine($fh, $i & @TAB & @TAB & _scanLetter())
    Case Else
    FileWriteLine($fh, $i & @TAB & _scanLetter())
    EndSelect
    Next
    FileClose($fh)

    [/autoit] [autoit][/autoit] [autoit]

    Func _scanLetter()
    Local $arSize[1]
    For $i = 40 To 190
    $pos = PixelSearch(40, $i, 240, $i, 0xFF0000)
    If IsArray($pos) Then
    ReDim $arSize[UBound($arSize)+1]
    $arSize[UBound($arSize)-1] = $pos[1]
    EndIf
    Next
    If UBound($arSize) > 1 Then Return $arSize[UBound($arSize)-1] - $arSize[1] +1
    EndFunc

    [/autoit]