GUI / Label: Text bei Überlauf verkleinern

  • Hier ein Beispiel-Code:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    Opt("GUIOnEventMode", True)

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

    $hGUI = GUICreate("Font test", 100, 75)
    $hGUILabel = GUICtrlCreateLabel("", 0, 0, 100, 25)
    GUICtrlSetFont(-1, 12)
    $hGUIInput = GUICtrlCreateInput("Auto", 0, 25, 100, 25)
    GUICtrlSetFont(-1, 12)
    $hGUIButton = GUICtrlCreateButton("Übernehmen", 0, 50, 100, 25)
    GUICtrlSetFont(-1, 12)
    GUICtrlSetOnEvent(-1, "_CopyText")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUISetState()

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

    _CopyText()

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

    While 1
    sleep(500)
    WEnd

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

    Func _CopyText()
    GUICtrlSetData($hGUILabel, GUICtrlRead($hGUIInput))
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]


    Wie verändere ich dieses Code, um meinen Text innerhalb des Labels ($hGUILabel) zu verkleinern, sobald dieser sonst in die zweite Zeile reicht?
    [ Um zu zeigen was ich meine: Gibt in das Input mal "Dieser Text ist zu lang" ein, und drückt "Übernehmen" ]

    Danke

    Spoiler anzeigen

    Überraschung!


    MfG Donkey

  • Hab letztlich in einem Thread von einem "Textmeter" Programm gelesen. Damit könntest du die Breite des Textes bestimmen und dementsprechend handeln.

    ~IRC: irc.afterworkchat.de #autoit

  • Diese UDF setzt dynamisch die Textgröße, damit der Text in das Label passt.

  • Dann könnte man es mit der UDF ja umgekehrt probieren.
    So lange die Schrift verkleinern, bis das Label / Fenster nicht mehr vergrößert wird.

  • Mit $iWidth kann man die Breite des Labels angeben. Wenn das UDF dann eine größere Höhe zurückgibt, dann muss der Text in 2 oder mehr Zeilen umgebrochen werden. Daher $iSize verkleinern und so lange probieren, bis sich die Höhe nicht mehr ändert.

  • Genau das habe ich gerade gemacht und es funktioniert:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include "C:\Users\David\Desktop\StringSize.au3"
    #include <Array.au3>
    Opt("GUIOnEventMode", True)

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

    $hGUI = GUICreate("Font test", 100, 75)
    $hGUILabel = GUICtrlCreateLabel("", 0, 0, 100, 25)
    GUICtrlSetFont(-1, 12)
    $hGUIInput = GUICtrlCreateInput("Auto", 0, 25, 100, 25)
    GUICtrlSetFont(-1, 12)
    $hGUIButton = GUICtrlCreateButton("Übernehmen", 0, 50, 100, 25)
    GUICtrlSetFont(-1, 12)
    GUICtrlSetOnEvent(-1, "_CopyText")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUISetState()

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

    _CopyText()

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

    While 1
    sleep(500)
    WEnd

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

    Func _CopyText()
    GUICtrlSetData($hGUILabel, GUICtrlRead($hGUIInput))
    SetFitFont($hGUI, $hGUILabel, "Arial")
    EndFunc

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

    Func SetFitFont($hGUI, $hHandle, $sFontName, $iAttrib = 0, $iWeight = 400)
    for $iSize = 100 to 0 step -0.5
    $StringSize = _StringSize(GUICtrlRead($hHandle), $iSize, $iWeight, $iAttrib)
    If $StringSize[2] <= ControlGetPos($hGUI, "", $hHandle)[2] and $StringSize[3] <= ControlGetPos($hGUI, "", $hHandle)[3] Then
    GUICtrlSetFont($hHandle, $iSize, $iWeight, $iAttrib, $sFontName)
    Return True
    EndIf
    Next
    Return -1
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]

    Und nochmal die Funktion selber:

    [autoit]

    Func SetFitFont($hGUI, $hHandle, $sFontName, $iAttrib = 0, $iWeight = 400)
    for $iSize = 100 to 0 step -0.5
    $StringSize = _StringSize(GUICtrlRead($hHandle), $iSize, $iWeight, $iAttrib)
    If $StringSize[2] <= ControlGetPos($hGUI, "", $hHandle)[2] and $StringSize[3] <= ControlGetPos($hGUI, "", $hHandle)[3] Then
    GUICtrlSetFont($hHandle, $iSize, $iWeight, $iAttrib, $sFontName)
    Return True
    EndIf
    Next
    Return -1
    EndFunc

    [/autoit]
    Spoiler anzeigen

    Überraschung!


    MfG Donkey