Scrollbalken von Gui mit variabler Anzahl an Buttons

  • Hallo zusammen,

    ich möchte in einem GUI mit fester Größe, eine variable Anzahl an Buttons anzeigen. Im Fenster wird einen vertikale Scrollleiste angezeigt, das Fenster lässt sich aber trotzdem nicht scrollen, obwohl noch Buttons ausgeblendet sein müssten.

    Was mache ich faslch?

    [autoit]

    $WinWidth = 200
    $WindowGUI = GUICreate($Title & " Windows", $WinWidth +17, 176 + 25, @DesktopWidth / 2 + $WinWidth + 7, 0, BitOR($WS_BORDER,$WS_POPUP,$WS_VISIBLE,$DS_SETFOREGROUND,$WS_SYSMENU, $WS_VSCROLL), BitOR($WS_EX_OVERLAPPEDWINDOW,$WS_EX_TOPMOST,$WS_EX_TOOLWINDOW))
    GUISetOnEvent($GUI_EVENT_CLOSE, "SettingESC", $WindowGUI)
    WinSetOnTop($WindowGUI, "", 1)
    WinSetTrans($WindowGUI, "", $WinTransActive)
    GUISetFont(7, 350, Default, "Comic Sans MS", $WindowGUI)
    GUISetState(@SW_SHOW, $WindowGUI)

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

    $Windows = WinList()
    $top = 0
    For $i = 1 To $Windows[0][0]
    If $Windows[$i][0] <> "" And WinGetState($Windows[$i][0]) > 5 And IsVisible($Windows[$i][1]) Then
    GUICtrlCreateButton($Windows[$i][0], 0, $top, $WinWidth, 17)
    ConsoleWrite($Windows[$i][0] & @TAB & WinGetState($Windows[$i][0]) & @TAB & $top & @CRLF)
    $top += 20
    EndIf
    Next

    [/autoit]
  • hi,

    thx für den tip, ich habs aber dann doch net hinbekommen und mir eine alternative überlegt.
    ich hab quasi das array um die fenster bereinigt, die nicht angezeigt werden und dann das fenster direkt in der größe erstellt, dass alle buttons reinpassen. mit winmove hats immer die koordinaten zerhauen.

    ich denke das sollte auch iO sein, es sein denn, einer hat soviele fenster, dass das fenster größer wird, als der desktop ... das wäre natürlich dann doof ;)

    [autoit]

    $Windows = WinList()
    For $i = $Windows[0][0] To 1 Step -1
    If $Windows[$i][0] = "" Or WinGetState($Windows[$i][0]) < 5 Or Not IsVisible($Windows[$i][1]) Then
    _ArrayDelete($Windows, $i)
    Else
    ConsoleWrite($Windows[$i][0] & @TAB & WinGetState($Windows[$i][0]) & @CRLF)
    EndIf
    Next
    $Windows[0][0] = UBound($Windows) - 1
    $WindowGUI = GUICreate($Title & " Windows", $WinWidth, 20 * $Windows[0][0], @DesktopWidth / 2 + $WinWidth + 7, 0, BitOR($WS_BORDER,$WS_POPUP,$WS_VISIBLE,$DS_SETFOREGROUND,$WS_SYSMENU), BitOR($WS_EX_OVERLAPPEDWINDOW,$WS_EX_TOPMOST,$WS_EX_TOOLWINDOW), $MainGui)
    GUISetOnEvent($GUI_EVENT_CLOSE, "WindowESC", $WindowGUI)
    WinSetOnTop($WindowGUI, "", 1)
    WinSetTrans($WindowGUI, "", $WinTransActive)
    WinSetTrans($MainGUI, "", $WinTransActive)
    GUISetFont(7, 350, Default, "Comic Sans MS", $WindowGUI)
    For $i = 1 To $Windows[0][0]
    GUICtrlCreateButton($Windows[$i][0], 0, 20 * ($i - 1), $WinWidth, 17)
    GUICtrlSetOnEvent(-1, "ChangeFocusWindows")
    Next
    GUISetState(@SW_SHOW, $WindowGUI)

    [/autoit]