GUI innerhalb eines Tabs?

  • Hey hey hey,

    Sonntag Morgen :wacko: und ich probier schon seit Stunden... :rolleyes:

    Mein Script hat jetzt um die 600 Zeilen, mittlerweile verwende ich Tabs damit das übersichtlicher bleibt. Jetzt will ich noch ein externes GUI miteinbinden (hat auch um die 600 Zeilen). Damit das jetzt hier nicht so kompliziert wird und ihr euch nicht den Kopf über mein Script zerbrechen müsst und weils auch für mich einfacher ist, hab ich schon mal ein kleines Beispiel im englischen Forum gefunden. Den DLL-Call kann ich weglassen, ist wahrscheinlich aus einer frühren Version von AutoIt. Mich würd jetzt interessieren:

    Ist das überhaupt möglich, ein Child-GUI innerhalb eines Tabs zu erstellen!?

    Hab schon einiges versucht: z.B.: als parent: main_gui, tab bzw. tabitem, inzwischen hab ich schon das Buch runtergeladen :thumbup: und natürlich die SuFu vergewaltigt aber das hat alles nichts gebracht. :pinch:
    Bin mir aber sicher, dass einer von euch das Problem entweder mit Leichtigkeit oder eben auf eine andere Weise lösen wird.

    Vielen Dank für eure Hilfe, hier der Code aus dem Beispiel:

    [autoit]

    #include <GuiConstants.au3>
    #include <WindowsConstants.au3>

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

    $Main_GUI = GUICreate("Main", 500, 500)
    GUISetBkColor(0x00FFFF, $Main_GUI)

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

    ;~ $tab = GUICtrlCreateTab(5,5,490,490)

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

    ;~ GUICtrlCreateTabItem("first")
    GUICtrlCreateLabel("main GUI: $Main_GUI", 15,40)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    $Btn_Exit = GUICtrlCreateButton("E&xit", 20, 60, 90, 20)

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

    ;~ GUICtrlCreateTabItem("second")
    $Child1_GUI = GUICreate("Child1", 460, 250, 20, 230, $WS_CHILD, -1, $Main_GUI)
    GUISetBkColor(0x0000FF, $Child1_GUI)
    GUICtrlCreateLabel("first child gui: $Child1_GUI",15,15)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    GUISetState(@SW_SHOW)

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

    $Child2_GUI = GUICreate("Child2", 200, 100, 10, 50, $WS_CHILD+$WS_C, -1, $Child1_GUI)
    GUISetBkColor(0xfffaf0, $Child2_GUI)
    GUICtrlCreateLabel("second child gui: $Child2_GUI", 15,15)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    $Btn_Test = GUICtrlCreateButton("Test", 40, 40, 90, 20)
    GUISetState(@SW_SHOW)

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

    ;~ GUICtrlCreateTabItem("") ;==>Tab Ende

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

    GUISetState(@SW_SHOW, $Main_GUI)
    ;DllCall("user32.dll", "int", "SetParent", "hwnd", WinGetHandle($Child2_GUI), "hwnd", WinGetHandle($Child1_GUI))

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE, $Btn_Exit
    Exit
    Case $Btn_Test
    MsgBox(0, "Test", "Hit Button on Child Window")
    EndSwitch
    WEnd

    [/autoit]

    Einmal editiert, zuletzt von jaysn1875 (15. Dezember 2013 um 19:38)

    • Offizieller Beitrag

    Bevor ich mir Gedanken mache ob ein GUI in ein TAB integriert werden kann, stellt sich mir die Frage: "Warum soll da ein GUI rein?"
    Du kannst doch auf dem TAB Controls platzieren, weshalb also eine GUI?

    Edit:
    Hier mal eine Lösungsvariante

    Spoiler anzeigen
    [autoit]

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

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

    Global $xTab = 10, $yTab = 10

    [/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')

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

    $aTabDisp = _GUICtrlTab_GetDisplayRect($hTab)
    $hChild = GUICreate('Child', $aTabDisp[2]-$aTabDisp[0], $aTabDisp[3]-$aTabDisp[1], $aTabDisp[0]+$xTab, $aTabDisp[1]+$yTab, $WS_POPUP, $WS_EX_MDICHILD, $hMain)
    GUICtrlCreateLabel('Das ist ein Child-GUI', 100, 50)
    GUICtrlCreateLabel('Aber genausogut lassen sich Controls direkt auf dem TAB platzieren. :P', 25, 100)

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

    GUISetState(@SW_SHOW, $hMain)

    [/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]
  • Mother of Quellcode
    hätt ich nicht gedacht, dass es wirklich funktioniert.

    Ja das GUI soll da rein weil ich davor zurückschrecke das funktionierende externe Script so stark zu verändern.
    Ich habs zwar schon teilweise auf meine Bedürftnisse angepasst und konnte es sogar leicht verbessern aber
    das ganze GUI zu entfernen und anschließend die Controls in meinen Tab zu bekommen schaute anfangs für
    mich nachn ganzen Haufen Arbeit aus. Da dachte ich, dass es wohl einfacher wäre das komplette GUI in meinen
    Tab zu bekommen. Für dich sind 600 Zeilen nicht viel, für mich ist's das größte Projekt das ich bisher gemacht habe ^^

    Ich danke dir vielmals für die Mühe die ich gemacht hab. Tolle Arbeit