Tab-Namen ändern (Input-Box)

  • Hi,

    ich habe folgendes Problem:
    In diesem Code habe ich ein Textfeld und einen Button zum erstellen
    eines neuen Tabs. Das mit dem Tab erstellen funktioniert perfekt.
    Was leider nicht klappt, ist, dass wenn ich etwas in dem Textfeld ändere,
    der Name des aktuellen Tabs sich nicht ändert.
    Könnt ihr mir helfen? Danke!

    Spoiler anzeigen
    [autoit]


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


    Global $tabGui[1000], $Tab_ID = 1, $Aktiver_Tab = -1
    Global $tab_name = "Makro"

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

    #Region #GUI
    $main_gui = GUICreate("Makro Manager", 405, 150, 437, 143)

    $new_tab = GUICtrlCreateButton("Neuer Tab", 19, 90, 101, 21, $WS_GROUP)
    $Tab = GUICtrlCreateTab(5, 10, 396, 130)
    GUICtrlCreateTabItem($tab_name & " " & $Tab_ID)

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

    $name = GUICtrlCreateInput($tab_name & " " & $Tab_ID, 60, 50, 321, 21)
    GUICtrlCreateLabel("Name:", 20, 52, 35, 17)

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

    GUICtrlCreateTabItem("")
    GUISetState()
    #EndRegion #GUI

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

    Func InsertTab()
    $Tab_ID = $Tab_ID + 1
    ConsoleWrite($Tab_ID & @CRLF)

    GUICtrlCreateTabItem($tab_name & " " & $Tab_ID)

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

    $name = GUICtrlCreateInput($tab_name & " " & $Tab_ID, 60, 50, 321, 21)
    GUICtrlCreateLabel("Name:", 20, 52, 35, 17)

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

    GUICtrlCreateTabItem("")

    GUISwitch($tabGui[$Tab_ID])

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

    _GUICtrlTab_SetCurFocus($tab, $Tab_ID)
    GUISetState($GUI_SHOW, $tabGui[$Tab_ID])
    $Aktiver_Tab = $Tab_ID

    EndFunc ;==>InsertTab

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit

    Case $new_tab
    InsertTab()

    Case $name
    GUICtrlSetData($tab, GUICtrlRead($name))

    EndSwitch
    WEnd

    [/autoit]


    MfG
    qixx

  • Hi, sauber gemacht! 8)

    Spoiler anzeigen
    [autoit]


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

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

    Global $tabGui[1000], $Tab_ID = 1, $Aktiver_Tab = -1
    Global $tab_name

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

    #Region #GUI
    $main_gui = GUICreate("Makro Manager", 405, 150, 437, 143)

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

    $new_tab = GUICtrlCreateButton("Neuer Tab", 19, 90, 101, 21, $WS_GROUP)
    $Tab = GUICtrlCreateTab(5, 10, 396, 130)
    GUICtrlCreateTabItem("Makro " & $Tab_ID)

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

    $name = GUICtrlCreateInput("Ritzelrocker04 ;)", 60, 50, 321, 21)
    GUICtrlCreateLabel("Name:", 20, 52, 35, 17)

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

    GUICtrlCreateTabItem("")
    GUISetState()
    #EndRegion #GUI

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

    Func InsertTab()
    $Tab_ID = $Tab_ID + 1
    ConsoleWrite($Tab_ID & @CRLF)

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

    $tab_name = GUICtrlRead($name)

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

    GUICtrlCreateTabItem($tab_name & " " & $Tab_ID)

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

    $name = GUICtrlCreateInput($tab_name & " " & $Tab_ID, 60, 50, 321, 21)
    GUICtrlCreateLabel("Name:", 20, 52, 35, 17)

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

    GUICtrlCreateTabItem("")

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

    GUISwitch($tabGui[$Tab_ID])

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

    _GUICtrlTab_SetCurFocus($Tab, $Tab_ID)
    GUISetState($GUI_SHOW, $tabGui[$Tab_ID])
    $Aktiver_Tab = $Tab_ID

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

    EndFunc ;==>InsertTab

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit

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

    Case $new_tab
    InsertTab()

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

    Case $name
    GUICtrlSetData($Tab, GUICtrlRead($name))

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

    EndSwitch
    WEnd

    [/autoit]


    Viel Erfolg! ;)

  • Du versuchst den Namen des ganzen Tab Controls zu ändern. Nicht des Tab items. Du musst auch für deine TabItems und Inputfelder mit Arrays arbeiten!

    Edit: also ich hätte es so gemacht:

    Spoiler anzeigen
    [autoit]

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

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

    Global $tabGui[1000], $Tab_ID = 1, $Aktiver_Tab = -1
    Global $tab_name = "Makro"
    Dim $TabItem[2] = ["-",0] ; Hier das array in dem die TabItems gespeichert werden
    Dim $name[2] = ["-",0] ; Und hier die dazugehörigen Inputfelder

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

    #Region #GUI
    $main_gui = GUICreate("Makro Manager", 405, 150, 437, 143)

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

    $new_tab = GUICtrlCreateButton("Neuer Tab", 19, 90, 101, 21, $WS_GROUP)
    $Tab = GUICtrlCreateTab(5, 10, 396, 130)
    $TabItem[$Tab_ID] = GUICtrlCreateTabItem($tab_name & " " & $Tab_ID)
    ConsoleWrite("Erstelle: " & @TAB & "$TabItem["&$Tab_ID&"]"&@CRLF)
    $name[$Tab_ID] = GUICtrlCreateInput($tab_name & " " & $Tab_ID, 60, 50, 321, 21)
    ConsoleWrite("Erstelle: " & @TAB & "$name["&$Tab_ID&"]"&@CRLF&@CRLF)
    GUICtrlCreateLabel("Name:", 20, 52, 35, 17)

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

    GUICtrlCreateTabItem("")
    GUISetState()
    #EndRegion #GUI

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

    Func InsertTab()
    $Tab_ID += 1

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

    ReDim $TabItem[UBound($TabItem)+1] ;vergrößere die Arrays für Tabitems und
    ReDim $name[UBound($name)+1] ; Den Array für die Inputfelder

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

    $TabItem[$Tab_ID] = GUICtrlCreateTabItem($tab_name & " " & $Tab_ID)
    ConsoleWrite("Erstelle: " & @TAB & "$TabItem["&$Tab_ID&"]"&@CRLF)

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

    $name[$Tab_ID] = GUICtrlCreateInput($tab_name & " " & $Tab_ID, 60, 50, 321, 21)
    ConsoleWrite("Erstelle: " & @TAB & "$name["&$Tab_ID&"]"&@CRLF&@CRLF)

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

    GUICtrlCreateLabel("Name:", 20, 52, 35, 17)
    GUICtrlCreateTabItem("")

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

    ;~ GUISwitch($tabGui[$Tab_ID]) ; Wofür das!?

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

    _GUICtrlTab_SetCurFocus($tab, $Tab_ID)
    ;~ GUISetState($GUI_SHOW, $tabGui[$Tab_ID]) ; Und wofür das?!
    ;~ $Aktiver_Tab = $Tab_ID ; und wofür das?!

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

    EndFunc ;==>InsertTab

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit

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

    Case $new_tab
    InsertTab()
    EndSwitch

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

    For $i = 1 to UBound($name)-1
    Switch $nMsg
    Case $name[$i]
    GUICtrlSetData($TabItem[GUICtrlRead($Tab)+1],GUICtrlRead($name[$i]))
    ConsoleWrite("+> Ändere: " & @TAB & "$Tabitem["&GUICtrlRead($Tab)+1&"]"&@CRLF)
    EndSwitch
    Next
    WEnd

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

    Dim $TabItem[2] = ["-",0] ; Hier das array in dem die TabItems gespeichert werden
    Dim $name[2] = ["-",0] ; Und hier die dazugehörigen Inputfelder

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

    Was genau bewirken diese beiden? Das habe ich, trotz kurzer
    Erklärung, leider nicht verstanden. :/
    Wenn ich jetzt ein weiteres Element einbaue, muss ich die dann
    auch mit Dim deklarieren?


    MfG
    qixx

    • Offizieller Beitrag
    Zitat

    Wenn ich jetzt ein weiteres Element einbaue, muss ich die dann
    auch mit Dim deklarieren?

    Nein, das wird im Script mit ReDim angepaßt.

    [autoit]

    ReDim $TabItem[UBound($TabItem)+1] ;vergrößere die Arrays für Tabitems und
    ReDim $name[UBound($name)+1] ; Den Array für die Inputfelder

    [/autoit]
  • Was genau bewirken diese beiden? Das habe ich, trotz kurzer
    Erklärung, leider nicht verstanden. :/

    Es wird ein Array mit 2 elementen angelegt. "-" für das erste Element, also $TabItem[0], (Weil deine Tab_ID ja bei 1 anfängt zu zählen und nicht bei 0, lassen wir einfach das erste element "frei"), und 0 fürs zweite Element, welches beim erstellen der GUI verwendet wird. Anstatt 0 kannst du auch "gibtsnochnicht" eintragen - das wird ein paar zeilen später* eh überschrieben.

    Wie Raupi schon richtig erwähnte, wird die größe der Arrays in der Funktion _InsertTab() durch "ReDim" vergrößert. Alternativ hätte man auch _ArrayAdd() verwenden können.


    *und zwar hier:

    [autoit]

    $TabItem[$Tab_ID] = GUICtrlCreateTabItem($tab_name & " " & $Tab_ID)
    $name[$Tab_ID] = GUICtrlCreateInput($tab_name & " " & $Tab_ID, 60, 50, 321, 21)

    [/autoit]
  • Was habe ich hier denn jetzt falsch gemacht?
    Ich wollte einen Button hinzufügen zum Schließen des aktiven Tabs..
    Ich habe keine Erklärung dafür, was falsch sein könnte.^^

    Spoiler anzeigen
    [autoit]


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

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

    Global $tabGui[1000], $Tab_ID = 1, $Aktiver_Tab = -1
    Global $tab_name = "Makro"
    Dim $TabItem[2] = ["-",0] ; Hier das array in dem die TabItems gespeichert werden
    Dim $name[2] = ["-",0] ; Und hier die dazugehörigen Inputfelder
    Dim $tab_close[2] = ["-",0]

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

    #Region #GUI
    $main_gui = GUICreate("Makro Manager", 405, 150, 437, 143)

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

    $new_tab = GUICtrlCreateButton("Neuer Tab", 19, 90, 101, 21, $WS_GROUP)
    $Tab = GUICtrlCreateTab(5, 10, 396, 130)
    $TabItem[$Tab_ID] = GUICtrlCreateTabItem($tab_name & " " & $Tab_ID)
    ConsoleWrite("Erstelle: " & @TAB & "$TabItem["&$Tab_ID&"]"&@CRLF)
    $name[$Tab_ID] = GUICtrlCreateInput($tab_name & " " & $Tab_ID, 60, 50, 321, 21)

    $tab_close[$Tab_ID] = GUICtrlCreateButton("X", 380, 110, 16, 16, $WS_GROUP)
    GUICtrlSetColor(-1, 0xC0C0C0)
    GUICtrlSetBkColor(-1, 0x800000)


    ConsoleWrite("Erstelle: " & @TAB & "$name["&$Tab_ID&"]"&@CRLF&@CRLF)
    GUICtrlCreateLabel("Name:", 20, 52, 35, 17)

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

    GUICtrlCreateTabItem("")
    GUISetState()
    #EndRegion #GUI

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

    Func InsertTab()
    $Tab_ID += 1

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

    ReDim $TabItem[UBound($TabItem)+1] ;vergrößere die Arrays für Tabitems und
    ReDim $name[UBound($name)+1] ; Den Array für die Inputfelder

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

    $TabItem[$Tab_ID] = GUICtrlCreateTabItem($tab_name & " " & $Tab_ID)
    ConsoleWrite("Erstelle: " & @TAB & "$TabItem["&$Tab_ID&"]"&@CRLF)

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

    $name[$Tab_ID] = GUICtrlCreateInput($tab_name & " " & $Tab_ID, 60, 50, 321, 21)
    ConsoleWrite("Erstelle: " & @TAB & "$name["&$Tab_ID&"]"&@CRLF&@CRLF)

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

    $tab_close[$Tab_ID] = GUICtrlCreateButton("X", 380, 110, 16, 16, $WS_GROUP)
    GUICtrlSetColor(-1, 0xC0C0C0)
    GUICtrlSetBkColor(-1, 0x800000)

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

    GUICtrlCreateLabel("Name:", 20, 52, 35, 17)
    GUICtrlCreateTabItem("")

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

    _GUICtrlTab_SetCurFocus($tab, $Tab_ID)

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

    EndFunc ;==>InsertTab

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit

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

    Case $new_tab
    InsertTab()
    EndSwitch

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

    For $i = 1 to UBound($name)-1
    Switch $nMsg
    Case $name[$i]
    GUICtrlSetData($TabItem[GUICtrlRead($Tab)+1],GUICtrlRead($name[$i]))
    ConsoleWrite("+> Ändere: " & @TAB & "$Tabitem["&GUICtrlRead($Tab)+1&"]"&@CRLF)

    Case $tab_close[$i]
    GUICtrlDelete(GUICtrlRead($TabItem[GUICtrlRead($Tab)], 1))
    ;~ _GUICtrlTab_SetCurFocus($close_tab-1,1)
    EndSwitch
    Next
    WEnd

    [/autoit]


    MfG
    qixx

  • Hi,

    mir ist aufgefallen, dass der den Namen nur ändert, wenn man Enter
    drückt. Gibt man sonst den Text nur ein und wähl einen anderen Tab
    aus, wird der neue Tab umbenannt. Kann man das irgendwie verhindern?
    Am besten wäre es, wenn der Tab direkt mit der Eingabe umbenannt wird. :P
    (es geht um SEuBo's Vorschlag ;))


    MfG
    qixx

  • Spoiler anzeigen
    [autoit]

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

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

    Global $tabGui[1000], $Tab_ID = 1, $Aktiver_Tab = -1
    Global $tab_name = "Makro"
    Dim $TabItem[2] = ["-",0] ; Hier das array in dem die TabItems gespeichert werden
    Dim $name[2][2] = [["ID",0],["Letzer Text",$tab_name&" "&$Tab_ID]] ; Und hier die dazugehörigen Inputfelder
    Dim $tab_close[2] = ["-",0]

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

    #Region #GUI
    $main_gui = GUICreate("Makro Manager", 405, 150, 437, 143)

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

    $new_tab = GUICtrlCreateButton("Neuer Tab", 19, 90, 101, 21, $WS_GROUP)
    $Tab = GUICtrlCreateTab(5, 10, 396, 130)
    $TabItem[$Tab_ID] = GUICtrlCreateTabItem($tab_name & " " & $Tab_ID)
    ConsoleWrite("Erstelle: " & @TAB & "$TabItem["&$Tab_ID&"]"&@CRLF)
    $name[$Tab_ID][0] = GUICtrlCreateInput($tab_name & " " & $Tab_ID, 60, 50, 321, 21)
    $name[$Tab_ID][1] = $tab_name&" "&$Tab_ID

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

    $tab_close[$Tab_ID] = GUICtrlCreateButton("X", 380, 110, 16, 16, $WS_GROUP)
    GUICtrlSetColor(-1, 0xC0C0C0)
    GUICtrlSetBkColor(-1, 0x800000)

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

    ConsoleWrite("Erstelle: " & @TAB & "$name["&$Tab_ID&"][0]"&@CRLF&@CRLF)
    GUICtrlCreateLabel("Name:", 20, 52, 35, 17)

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

    GUICtrlCreateTabItem("")
    GUISetState()
    #EndRegion #GUI

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

    Func InsertTab()
    $Tab_ID += 1

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

    ReDim $tab_close[UBound($tab_close)+1]
    ReDim $TabItem[UBound($TabItem)+1] ;vergrößere die Arrays für Tabitems und
    ReDim $name[UBound($name)+1][2] ; Den Array für die Inputfelder

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

    $TabItem[$Tab_ID] = GUICtrlCreateTabItem($tab_name & " " & $Tab_ID)
    ConsoleWrite("Erstelle: " & @TAB & "$TabItem["&$Tab_ID&"]"&@CRLF)

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

    $name[$Tab_ID][0] = GUICtrlCreateInput($tab_name & " " & $Tab_ID, 60, 50, 321, 21)
    $name[$Tab_ID][1] = $tab_name&" "&$Tab_ID
    ConsoleWrite("Erstelle: " & @TAB & "$name["&$Tab_ID&"]"&@CRLF&@CRLF)

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

    $tab_close[$Tab_ID] = GUICtrlCreateButton("X", 380, 110, 16, 16, $WS_GROUP)
    GUICtrlSetColor(-1, 0xC0C0C0)
    GUICtrlSetBkColor(-1, 0x800000)

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

    GUICtrlCreateLabel("Name:", 20, 52, 35, 17)
    GUICtrlCreateTabItem("")

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

    _GUICtrlTab_SetCurFocus($tab, $Tab_ID)

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

    EndFunc ;==>InsertTab

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit

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

    Case $new_tab
    InsertTab()
    EndSwitch

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

    For $i = 1 to UBound($name)-1
    If GUICtrlRead($name[$i][0]) <> $name[$i][1] Then
    GUICtrlSetData($TabItem[GUICtrlRead($Tab)+1],GUICtrlRead($name[$i][0]))
    $name[$i][1] = GUICtrlRead($name[$i][0])
    ConsoleWrite("+> Ändere: " & @TAB & "$Tabitem["&GUICtrlRead($Tab)+1&"]"&@CRLF)

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

    EndIf

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

    Switch $nMsg
    Case $tab_close[$i]
    GUICtrlDelete($TabItem[GUICtrlRead($Tab)+1])
    ;~ _GUICtrlTab_SetCurFocus($close_tab-1,1)
    EndSwitch
    Next
    WEnd

    [/autoit]

    Updated den Namen jetzt in "Echtzeit". das War die einzige Möglichkeit die mir spontan eingefallen ist.

  • Yeah! :)
    Vielen Dank!

    Ich muss mal noch sagen, dass es mir hier sehr gut gefällt, auch
    dass immer gerne komplette Beispiele gegeben werden. :)
    Schön funktionierendes Hilfe-Forum! Ich sehe selten sowas!

    Edit:
    Hmm, noch ein Problem. :D
    Wenn ich einen Tab lösche, dann funktioniert bei denen, die hinter
    dem gelöschten Tab liegen nichts mehr. Weder Button, noch Textfeld.
    Was könnte das problem sein?


    MfG
    qixx