Label automatisch vergrößern

  • Hallo,

    auf zum nächsten Problem.

    Ich habe ein Label das mit einer Combobox
    eine Caption-Änderung erhält.

    Das Problem ist die Größe.
    Kann man die irgendwie dynamisch ändern.
    Ich meine daß das Labelfeld automatisch (je nach Größe) nach rechts verlängert wird!

    Mein Code:

    [autoit]


    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    $Form1 = GUICreate("Form1", 615, 440, 192, 124)
    $Label1 = GUICtrlCreateLabel("Label1", 60, 32, 36, 17)
    $Sprache = GUICtrlCreateCombo("Sprache", 208, 28, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
    GUICtrlSetData(-1, "Deutsch|Englisch")
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Sprache
    _Sprache()
    EndSwitch
    WEnd
    Func _Sprache()

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

    Switch GUICtrlRead($Sprache)
    Case "Deutsch"
    GUICtrlSetData($Label1, "Text in deutsch")

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

    Case "Englisch"
    GUICtrlSetData($Label1, "This is an english text for you?")

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

    EndSwitch

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

    EndFunc

    [/autoit]

    Grüße
    Ilse ;)

  • Hallo Daniel,

    ja, aber das klappt nicht!

    [autoit]


    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    $Form1 = GUICreate("Form1", 615, 440, 192, 124)
    $Label1 = GUICtrlCreateLabel("Label1", 60, 32, 36, 17)
    GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
    $Sprache = GUICtrlCreateCombo("Sprache", 208, 28, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
    GUICtrlSetData(-1, "Deutsch|Englisch")
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Sprache
    _Sprache()
    EndSwitch
    WEnd
    Func _Sprache()

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

    Switch GUICtrlRead($Sprache)
    Case "Deutsch"
    GUICtrlSetData($Label1, "Text in deutsch")

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

    Case "Englisch"
    GUICtrlSetData($Label1, "This is an english text for you?")

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

    EndSwitch

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

    EndFunc

    [/autoit]

    hm, ich wollte ja nicht das Feld vergrößern
    wenn die Gui geändert wird. Das Feld sollte
    vergrößert werden bei unterschiedlichem Combo-Inhalt!
    Die Gui bleibt!


    Grüße
    Ilse ;)

    Einmal editiert, zuletzt von Ilse (15. Dezember 2010 um 17:17)

  • Hi,habs jetzt nicht getestet, aber hast du dir mal GUICtrlSetResizing angesehen?Gruß Daniel


    Das reagiert nur auf Grössenänderung der GUI.

    Ilse, was spricht dagegen das Label Erstellen gleich nit der grösste mögliche Breite (und evtl. Höhe) zu erstellen? Der Stil

    Zitat von Hilfe

    $SS_LEFT 0x0000 Erzeugt ein einfaches Rechteck und setzt den Text im Rechteck linksbündig. Der Text wird formatiert, bevor er angezeigt wird. Worte, die über das Zeilenende hinausgehen, werden automatisch in die nächste Zeile linksbündig umgebrochen. Worte, die länger sind als die Control-Breite, werden getrennt.

    ist dafür sicherlich auch nützlich,

    mfg autoBert

  • autoBert,

    $SS_LEFT 0x0000 habe ich probiert

    [autoit]


    $Label1 = GUICtrlCreateLabel("Label1", 60, 32, 36, 17, $SS_LEFT 0x0000)

    [/autoit]

    es gibt eine Fehlermeldung!

    Mit der festen Breite habe ich auch probiert
    ...aber da ich noch nicht so ganz von Koda weg bin
    gibt es Probleme. Koda erzeugt auch wenn gespeichert wird
    die Ursprungsgröße des Labels, auch wenn man diese verbreitert abgespeichert hat.
    Beim Laden ist die alte Größe wieder da.

    Grüße
    Ilse ;)

  • Mit der festen Breite habe ich auch probiert
    ...aber da ich noch nicht so ganz von Koda weg bin
    gibt es Probleme. Koda erzeugt auch wenn gespeichert wird
    die Ursprungsgröße des Labels, auch wenn man diese verbreitert abgespeichert hat.
    Beim Laden ist die alte Größe wieder da.

    Wenn Koda nicht akzeptiert, dass du der Chef bist dann schmeiss es auf den Müll.

    die Zeile würde so aussehen:

    [autoit]

    $Label1 = GUICtrlCreateLabel("Label1", 60, 32, 120, 32,$SS_LEFT)

    [/autoit]
  • geht aber beides nicht!

    [autoit]


    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    $Form1 = GUICreate("Form1", 615, 440, 192, 124)
    $Label1 = GUICtrlCreateLabel("Label1", 60, 32, 36, 17, 0x0000 )

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

    $Sprache = GUICtrlCreateCombo("Sprache", 208, 28, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
    GUICtrlSetData(-1, "Deutsch|Englisch")
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Sprache
    _Sprache()
    EndSwitch
    WEnd
    Func _Sprache()

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

    Switch GUICtrlRead($Sprache)
    Case "Deutsch"
    GUICtrlSetData($Label1, "Text in deutsch")

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

    Case "Englisch"
    GUICtrlSetData($Label1, "This is an english text for you?")

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

    EndSwitch

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

    EndFunc

    [/autoit]
  • Ilse, wenn ich meine Zeile aus dem vorhegehenden Post in dein Skript einfüge:

    Spoiler anzeigen
    [autoit]

    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    $Form1 = GUICreate("Form1", 615, 440, 192, 124)
    $Label1 = GUICtrlCreateLabel("Label1", 60, 32, 120, 32,$SS_LEFT)
    ;GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
    $Sprache = GUICtrlCreateCombo("Sprache", 208, 28, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
    GUICtrlSetData(-1, "Deutsch|Englisch")
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Sprache
    _Sprache()
    EndSwitch
    WEnd
    Func _Sprache()

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

    Switch GUICtrlRead($Sprache)
    Case "Deutsch"
    GUICtrlSetData($Label1, "Text in deutsch")

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

    Case "Englisch"
    GUICtrlSetData($Label1, "This is an english text for you?")

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

    EndSwitch

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

    EndFunc

    [/autoit]

    klappt das wunderbar

    mfg autoBert

    • Offizieller Beitrag

    Man kann aber auch das Feld dynamisch verändern (mit ControlMove).

    Dazu kann man auch die Größe des Textes automatisch ermitteln lassen. Funktioniert allerdings nur bei Arial,11 zufriedenstellend:

    Spoiler anzeigen
    [autoit]


    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WinAPI.au3>

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

    $Form1 = GUICreate("Form1", 615, 440, 192, 124)
    $Label1 = GUICtrlCreateLabel("Label1", 60, 32, 60, 60, $SS_LEFT)
    GUICtrlSetFont(-1, 11, 0, 0, 'Arial')
    GUICtrlSetBkColor(-1, 0xFFFF88)

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

    $Sprache = GUICtrlCreateCombo("Sprache", 290, 32, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
    GUICtrlSetData(-1, "Deutsch|Englisch")
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Sprache
    _Sprache()
    EndSwitch
    WEnd

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

    Func _Sprache()
    Switch GUICtrlRead($Sprache)
    Case "Deutsch"
    _ControlSetTextSize($Form1, $Label1, "Text in deutsch")
    Case "Englisch"
    _ControlSetTextSize($Form1, $Label1, "This is an english text for you?")
    EndSwitch
    EndFunc ;==>_Sprache

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

    Func _ControlSetTextSize($hWnd, $hControl, $sMsg)
    Local $hDC, $tSize, $iX, $iY, $aPos
    $hDC = _WinAPI_GetDC($hWnd)
    $tSize = _WinAPI_GetTextExtentPoint32($hDC, $sMsg)
    $iX = DllStructGetData($tSize, 'X')
    $iY = DllStructGetData($tSize, 'Y')
    $aPos = ControlGetPos($hWnd, '', $hControl)
    ControlMove($hWnd, '', $hControl, $aPos[0], $aPos[1], $iX, $iY)
    GUICtrlSetData($hControl, $sMsg)
    _WinAPI_ReleaseDC($hWnd, $hDC)
    EndFunc

    [/autoit]


    Hier mal mit gelbem Hintergrund um die Abmessungen besser sehen zu können.

  • Bin letztens hierauf gestoßen ^^

    Spoiler anzeigen
    [autoit]

    Func _GetTextSize($nText, $sFont = 'Microsoft Sans Serif', $iFontSize = 8.5, $iFontAttributes = 0)
    ;Author: Bugfix
    ;Modified: funkey
    If $nText = '' Then Return
    Local $hGui = GUICreate("Textmeter by Bugfix")
    _GDIPlus_Startup()
    Local $hFormat = _GDIPlus_StringFormatCreate(0)
    Local $hFamily = _GDIPlus_FontFamilyCreate($sFont)
    Local $hFont = _GDIPlus_FontCreate($hFamily, $iFontSize, $iFontAttributes, 3)
    Local $tLayout = _GDIPlus_RectFCreate(15, 171, 0, 0)
    Local $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)
    Local $aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $nText, $hFont, $tLayout, $hFormat)
    Local $iWidth = Ceiling(DllStructGetData($aInfo[0], "Width"))
    Local $iHeight = Ceiling(DllStructGetData($aInfo[0], "Height"))
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    GUIDelete($hGui)
    Local $aSize[2] = [$iWidth, $iHeight]
    Return $aSize
    EndFunc ;==>_GetTextSize

    [/autoit]

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Hallo Ilse,

    Die Hilfe kennt dazu den erweiterten Stil $WS_EX_TOPMOST. Also einfach bei der Erstellung des Controls mit angeben,

    Oscar : das ist bei einem Label nicht nötig, da es (normalerweise) die gleiche Hintergrundfarbe wie die GUI hat, im Gegenteil wenn es durch ControlMove nachträglich verändert wird besteht die Gefahr ein anderes Control zu überlappen und dadurch nicht anklickbar zu machen,

    mfg autoBert

    Einmal editiert, zuletzt von autoBert (15. Dezember 2010 um 20:11)