Tabs im Windows Stil

  • Hey Leute,
    ich möchte gerne ein Tab erstellen, dass dem des Windows Forms 2.0 Tabstrip gleich kommt.

    Mit dem Koda FormDesigner kann ich es anzeigen, (s. Bild) aber arbeiten kann ich damit noch nicht. Im Quellcode hab ich einen Button gesetzt, den man im GUI nicht sieht, erst wenn man über die Psoition drüber fährt kommt er zum Vorschein.

    Hat jemand ne Idee, wie ich das Activex Control richtig einsetzen kann?

    Danke jungs!

  • Also irgendwo in den englischen Foren stand, dass AutoIT nur die basic styles drauf hat. Allerdings bringt AutoIT noch ne UDF von Haus aus mit, heisst dann:

    [autoit]

    ...
    $hGUI = GUICreate("Test", 400, 300)
    $hTab = _GUICtrlTab_Create($hGUI, 2, 2, 396, 296)
    ...

    [/autoit]


    Das Problem ist der weiße Hintergrund im Tab Feld. Verwende ich nun den falg $TCS_BUTTONS, bekomme ich buttons, ungewollt, aber dafür stimmt der Hintergrund dann (grau). Allerdings fehlt noch die abgerundeteten Tabs.

    [autoit]

    ...
    $hGUI = GUICreate("Test", 400, 300)
    $hTab = _GUICtrlTab_Create($hGUI, 2, 2, 396, 296, $TCS_BUTTONS )
    ...

    [/autoit]


    Dann gibt es nen flag für die selbe Funktion, heisst $TCS_OWNERDRAWFIXED. Dannach ist der style perfekt. Einzige Probleme: Keine Schrift und keine Ahnung wie sich die Tabs switchen lassen, also, dass auf jedem was anderes zu sehen ist. Dummerweise zeigt keines der examples wie man die switcht, da in keinem example weitere controls außer dem tab ctrl verwendet werden -.-

    [autoit]

    ...
    $hGUI = GUICreate("Test", 400, 300)
    $hTab = _GUICtrlTab_Create($hGUI, 2, 2, 396, 296, $TCS_OWNERDRAWFIXED)
    ...

    [/autoit]


    Habe das Ganze nochmal in nem Bild dargestellt.
    Also es muss kein ActivexControl sein, wie man im Bild sehen kann geht es auch mit der oben genannten Funktion. Das flag $TCS_OWNERDRAWFIXED hat folgende Bedeutung:
    "The parent window is responsible for drawing tabs"
    Ich habe leider überhaupt keine Ahnung welche Gesetze jetzt gelten.
    Ich denke der Weg ist nicht mehr weit. Hat jemand eine idee, wie ich den Tab text hinzufüge und die tabs switche?


    Danke schon mal!

    • Offizieller Beitrag

    Ich weiß jetzt nicht genau, worauf du hinaus willst - aber das kann man doch ganz normal zwischen den Item switchen.

    [autoit]

    #include <GuiTab.au3>

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

    $hGUI = GUICreate("Draw Tab", 300, 200)
    $hTab = GUICtrlCreateTab(10, 10, 280, 180)
    $TabItem_1 = GUICtrlCreateTabItem("Item1")
    ; == erst alle Ctrl für Tab-Item_1 erstellen, dann das nächste Tab usw.
    GUICtrlCreateLabel('Label-TAB_1',30,50)
    $TabItem_2 = GUICtrlCreateTabItem("Item2")
    GUICtrlCreateLabel('Label-TAB_2',30,50)
    $TabItem_2 = GUICtrlCreateTabItem("Item3")
    GUICtrlCreateLabel('Label-TAB_3',30,50)
    GUICtrlCreateTabItem("")

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

    GUISetState()

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

    Do
    Until GUIGetMsg() = -3

    [/autoit]
  • ich glaub er will GUICtrlCreateTab nur im Default designe von windows

    [autoit]

    $hGUI = GUICreate("Draw Tab", 300, 200)
    $hTab = GUICtrlCreateTab(10, 10, 280, 180)
    DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle(-1), "wstr", "Explorer", "wstr", 0)
    $TabItem_1 = GUICtrlCreateTabItem("Item1")
    GUICtrlCreateLabel('Label-TAB_1',30,50)
    $TabItem_2 = GUICtrlCreateTabItem("Item2")
    GUICtrlCreateLabel('Label-TAB_2',30,50)
    $TabItem_2 = GUICtrlCreateTabItem("Item3")
    GUICtrlCreateLabel('Label-TAB_3',30,50)
    GUICtrlCreateTabItem("")
    GUISetState()

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

    Do
    Until GUIGetMsg() = -3

    [/autoit]

    mfg

  • Hi, hier ein weiteres Beispiel. ;)

    [autoit]


    $title = "TabSwitch - Tut"
    Global $tate = 0, $TabSheet[2]
    GUICreate($title, 600, 450)
    $button = GUICtrlCreateButton($title, 10, 10, 200, 25)
    $bnClose = GUICtrlCreateButton($title & " Beenden", 390, 10, 200, 25)
    $Tab = GUICtrlCreateTab(10, 50, 580, 390)
    $TabSheet[0] = GUICtrlCreateTabItem("TabItem 1")
    GUICtrlCreateButton("Button 1", 72, 168, 121, 22)
    $TabSheet[1] = GUICtrlCreateTabItem("TabItem 2")
    GUICtrlCreateLabel("Label 1", 40, 88, 36, 17)
    GUICtrlCreateInput("Input 1", 96, 80, 73, 21)
    GUICtrlCreateLabel("Label 2", 40, 112, 36, 17)
    GUICtrlCreateInput("Input 2", 96, 112, 73, 21)
    GUISetState(@SW_SHOW)

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

    While True
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3, $bnClose
    MsgBox(64, $title, "Viel Spaß wünscht RR04 !" & @TAB, 3)
    ExitLoop
    Case $button
    $tate = BitXOR($tate, 0, 1)
    For $k = 0 To 1 ;i statisch kein Ubound
    GUICtrlSetState($TabSheet[$tate], 16)
    GUICtrlSetData($button, "Wechseln zu TabItem " & BitXOR($tate, 0, 1) + 1)
    Next
    EndSwitch
    WEnd
    ; Ende

    [/autoit]
  • ok sorry, dann hab ich mich schlecht ausgedrückt. Also ich möchte gerne folgenden Style, siehe Bild -> Abgerundete Tabs und grauer Hintergrund. Das klappt auch, wenn ich das flag setze, aber wenn ich das setze, löscht es den Tab text.

    Switchen geht jetzt, hab net gewusst das das flag $TCS_OWNERDRAWFIXED auch für die Funktion GUICreate() klappt. Jetzt passts. Fehlt nur noch der Tab text! Wie mach ich das?

    [autoit]


    #include <GUIConstantsEx.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiTab.au3>
    #include <WindowsConstants.au3>
    Example()

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

    Func Example()
    Local $msg

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

    GUICreate("My GUI Tab") ; will create a dialog box that when displayed is centered

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

    ;~ GUISetBkColor(0x00E0FFFF)
    GUISetFont(9, 300)

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

    GUICtrlCreateTab(10, 10, 800, 800, $TCS_OWNERDRAWFIXED)

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

    GUICtrlCreateTabItem("tab0")
    GUICtrlCreateLabel("label0", 30, 80, 50, 20)
    GUICtrlCreateButton("OK0", 20, 50, 50, 20)
    GUICtrlCreateInput("default", 80, 50, 70, 20)

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

    GUICtrlCreateTabItem("tab----1")
    GUICtrlCreateLabel("label1", 30, 80, 50, 20)
    GUICtrlCreateCombo("", 20, 50, 60, 120)
    GUICtrlSetData(-1, "Trids|CyberSlug|Larry|Jon|Tylo", "Jon") ; default Jon
    GUICtrlCreateButton("OK1", 80, 50, 50, 20)

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

    GUICtrlCreateTabItem("tab2")
    GUICtrlSetState(-1, $GUI_SHOW) ; will be display first
    GUICtrlCreateLabel("label2", 30, 80, 50, 20)
    GUICtrlCreateButton("OK2", 140, 50, 50)

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

    GUICtrlCreateTabItem("") ; end tabitem definition

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

    ;~ GUICtrlCreateLabel("label3", 20, 130, 50, 20)

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

    GUISetState()

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

    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()

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

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
    EndFunc ;==>Example

    [/autoit]