GUI: Einer scrollbaren Group nachträglich Controls zufügen...

  • Hallo Community,
    Momentan arbeite ich an einer Gui welche 5 Tabs hat. In einem Tab habe ich eine scrollbare Group für Programmeinstellungen erstellt, welche zur Laufzeit erst mit Controls gefüllt wird. Nur werden die Controls nicht innerhalb der Group, sondern iwie darüber gezeichnet...
    Ich habe auch schon Gegoogelt und weiß wie ich die Controls auf dem richtigen Tab plaziere - nur funktioniert das eben nicht mit der entsprechenden Group. Momentan stehe ich voll auf dem Schlauch und weiß mir nicht mehr zu helfen...

    Hat jemand vielleicht eine kleine Lösung parat??

    Ich bin grade Mobil Online, und kann deswegen keinen beispiel Source posten - müsste ich sonst später machen, ich hoffe Ihr versteht mich auch so :D

    Grüsse!

    Einmal editiert, zuletzt von Techmix (2. Juni 2014 um 10:33)

  • Ich habe noch ein kleines Beispiel gecodet, da kann man sehen wo genau mein Problem liegt.

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Scrolling Group", 405, 350, 276, 372)
    $Tab1 = GUICtrlCreateTab(8, 8, 385, 273)
    $TabSheet1 = GUICtrlCreateTabItem("TabSheet1")
    $Edit1 = GUICtrlCreateEdit("", 24, 40, 353, 225)
    GUICtrlSetData(-1, StringFormat("GUI Test\r\n\r\nScrollbare Group in Tab 2 wird nach dem Start mit Controls befüllt.\r\nIch bekomme alles auf Tab 2 ABER nicht innerhalb der Group \r\ndamit ich den Inhalt scrollen kann..."))
    $TabSheet2 = GUICtrlCreateTabItem("TabSheet2")
    ;~ $Group1 = GUICtrlCreateGroup("Scroll Group", 24, 40, 353, 225, BitOR($GUI_SS_DEFAULT_GROUP,$WS_VSCROLL))
    ;~ GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateTabItem("")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    ; Hier scheint was nicht zu stimmen...
    GUISwitch($Form1, $TabSheet2) ; Sonst werden die Controls überall auf der GUI erstellt...
    $Group1 = GUICtrlCreateGroup("Scroll Group", 24, 40, 353, 225, BitOR($GUI_SS_DEFAULT_GROUP,$WS_VSCROLL))
    for $i = 0 To 15
    GUICtrlCreateLabel(" Label "&$i+1, 36, 56+($i*25), 250, 21, BitOR($SS_CENTERIMAGE,$WS_BORDER,$WS_Group)) ; Label
    GUICtrlCreateInput($i+1, 36+255, 56+($i*25), 55, 21,$WS_Group) ; Input
    Next
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateTabItem("")
    GUISwitch($Form1)
    GUICtrlSetState($TabSheet1, $GUI_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]

    Wenn ihr auf Tab 2 geht, seht ihr das die erstellten Controls über (und nicht innerhalb) der Group plaziert werden. Wie kann ich das ändern??

    Grüsse!

  • Hallo Techmix,

    ich kämpfe auch seit ein paar Tagen mit dem selben Problem. Mittlerweile habe ich eine für mich ganz pasable Lösung aus mehreren Beispielen hier im Forum gebastelt. Mein Ziel war es, auf einem Tab die linke Hälfte scrollbar zu machen. Das Mausrad wird ebenfalls mit unterstützt.

    [autoit]

    #include <array.au3>
    #include <WindowsConstants.au3>
    #include <GuiTab.au3>
    #include <GuiScroll.au3>

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

    Dim $idButton[100]
    Global $xTab = 10, $yTab = 10
    GUIRegisterMsg($WM_SIZE, "WM_SIZE")
    GUIRegisterMsg($WM_VSCROLL, "WM_VSCROLL")
    GUIRegisterMsg($WM_MOUSEWHEEL, "_Mausrad")

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

    $hMain = GUICreate('Test', 420, 400)
    $cTab = GUICtrlCreateTab($xTab, $yTab, 400, 300)
    $hTab = GUICtrlGetHandle($cTab)
    $cTabItem1 = GUICtrlCreateTabItem('Item_1')
    $cTabItem2 = GUICtrlCreateTabItem('Item_2')
    $aTabDisp = _GUICtrlTab_GetDisplayRect($hTab)
    $hChild = GUICreate("",170,$aTabDisp[3]-$aTabDisp[1],$aTabDisp[0]+$xTab,$aTabDisp[1]+$yTab,BitOR($WS_POPUP, $WS_GROUP, $WS_VSCROLL, $WS_CLIPSIBLINGS),$WS_EX_MDICHILD,$hMain)
    for $i = 0 to 99
    $idButton[$i] = GUICtrlCreateButton("Radio " & $i, 5, $i*25, 50, 20)
    Next
    GUISetState(@SW_SHOW, $hMain)

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

    Scrollbar_Create($hChild, $SB_VERT, $i*25)
    Scrollbar_Step(20, $hChild, $SB_VERT)

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

    While 1
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $cTab
    If GUICtrlRead($cTab) = 1 Then
    GUISetState(@SW_SHOWNA, $hChild)
    Else
    GUISetState(@SW_HIDE, $hChild)
    EndIf
    EndSwitch
    WEnd

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

    Func _Mausrad($hWnd, $Msg, $wParam)
    #forceref $Msg, $wParam
    If $wParam == "0x00780000" Then _Bild_rauf()
    If $wParam == "0xFF880000" Then _Bild_runter()

    EndFunc

    Func _Bild_runter()
    for $i = 0 To 4 Step 1
    WM_VSCROLL($hChild, 0x0, 0x00000001, 0) ;1 mal kurz nach oben Scrollen - selber Effekt wie auf den Pfeil klicken
    Next
    EndFunc

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

    Func _Bild_rauf()
    for $i = 0 To 4 Step 1
    WM_VSCROLL($hChild, 0x0, 0x00000000, 0) ;1 mal kurz nach unten Scrollen - selber Effekt wie auf den Pfeil klicken
    Next
    EndFunc

    [/autoit]

    Ich hoffe das hilft dir.

    Viele Grüße
    Espyre