Dynamisches Label

  • Ist es möglich, ein Label dynamisch in der Größe zu verändern? Also, die Labelgröße soll halt anhand der Anzahl der Buchstaben die in diesem stehen, verändert werden. Dabei soll das Label bei meinetwegen 4 Buchstaben nicht immer 25 Pixel breit sein. Wenn z. B. "AAAA" drin steht muss es breiter sein, als wenn "IIII" drin steht! Wie ist das zu realisieren? Könnte vorweg ja eine Tabelle anlegen wo die Breite je Buchstabe hinterlegt wird und das dann dynamisch berechnen. Erscheint mir aber doch kompliziert.

  • Hallo scritch,

    das ist imho nicht notwendig. Da das Label ja in der GUI nur eine maximalen Platz belegen kann solltest du es einfach mit der Breite (u. evtl. Höhe) des längsten Textes erstellen,

    mfg autoBert

  • Das Problem ist, dass ich durch eine Inputbox die Beschriftung erst später dem Label zuweisen werde! Desweiteren kann ich vorher nicht genau sagen, wie lang der längste Text ist. Und pauschal sagen, dass das Label 200Pixel breit ist, möchte ich auch nicht, da es sonst zu Überlappungen von Controls in der GUI kommt.

  • Das Problem ist, dass ich durch eine Inputbox die Beschriftung erst später dem Label zuweisen werde! Desweiteren kann ich vorher nicht genau sagen, wie lang der längste Text ist. Und pauschal sagen, dass das Label 200Pixel breit ist, möchte ich auch nicht, da es sonst zu Überlappungen von Controls in der GUI kommt.


    Wenn du das Label später dynamisch auf 200 Px erhöst hast das das gleiche Problem,

    mfg autoBert

  • ... oder Du lässt die GUI-Funktionen für Dich arbeiten:

    Spoiler anzeigen
    [autoit]

    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    Dim $aText[8] = [" A", " AA", " AAA", " AAAA", " AAAAA", " AAAAAA", " AAAAAAA", " AAAAAAAA"]
    GuiCreate("Test GUI")
    $idLbl = GUICtrlCreateLabel($aText[0], 20, 20, -1, -1, $WS_BORDER + $SS_CENTERIMAGE)
    GuiSetState()
    For $I = 1 To UBound($aText) - 1
    Sleep(2000)
    $W = _GetWidth($aText[$I])
    GUICtrlSetPos($idLbl, 20, 20, $W)
    GUICtrlSetData($idLbl, $aText[$I])
    Next
    Sleep(2000)
    Exit

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

    Func _GetWidth($Text)
    Local $hGUI = GuiCreate("Dummy")
    Local $idCtrl = GUICtrlCreateLabel($Text, 0, 0, -1, -1, $WS_BORDER + $SS_CENTERIMAGE)
    Local $aPos = ControlGetPos($hGUI, "", $idCtrl)
    GUIDelete($hGUI)
    Return $aPos[2]
    EndFunc

    [/autoit]