Tab-Namen ändern (Input-Box)

  • Was könnte das problem sein?

    Das liegt, daran, dass die Controls zwar gelöscht werden, aber in den Arrays immer noch vorhanden sind!
    Ein einfaches "_ArrayDelete($TabItem,GUICtrlRead($Tab)+1)" in Zeile 88 sollte da abhilfe schaffen!

    [autoit]

    Case $tab_close[$i]
    GUICtrlDelete($TabItem[GUICtrlRead($Tab)+1])
    _ArrayDelete($TabItem,GUICtrlRead($Tab)+1)

    [/autoit]
  • Mist, funzt doch nocht nicht ganz. xD
    Wenn ich nach dem Löschen einen neuen Tab erstellen will,
    stürzt das Programm ab!

    Zitat

    (47) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    $TabItem[$Tab_ID] = GUICtrlCreateTabItem($tab_name & " " & $Tab_ID)
    ^ ERROR

  • Das Control Handling hab ich jetzt mal größtenteils verändert, ich hoffe du blickst da jetzt noch durch:

    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][4] = [["TabItem","Tab_Close","NameInput","Letzer Text"],[0,0,0,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][0] = GUICtrlCreateTabItem($tab_name & " " & $Tab_ID)
    $TabItem[$Tab_ID][1] = GUICtrlCreateButton("X", 380, 110, 16, 16, $WS_GROUP)
    $TabItem[$Tab_ID][2] = GUICtrlCreateInput($tab_name & " " & $Tab_ID, 60, 50, 321, 21)
    $TabItem[$Tab_ID][3] = $tab_name&" "&$Tab_ID

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

    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 = UBound($TabItem)
    ReDim $TabItem[UBound($TabItem)+1][4] ; Den Array für die Inputfelder

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

    $TabItem[$Tab_ID][0] = GUICtrlCreateTabItem($tab_name & " " & $Tab_ID)
    $TabItem[$Tab_ID][1] = GUICtrlCreateButton("X", 380, 110, 16, 16, $WS_GROUP)
    GUICtrlSetColor(-1, 0xC0C0C0)
    GUICtrlSetBkColor(-1, 0x800000)
    $TabItem[$Tab_ID][2] = GUICtrlCreateInput($tab_name & " " & $Tab_ID, 60, 50, 321, 21)
    $TabItem[$Tab_ID][3] = $tab_name&" "&$Tab_ID

    [/autoit] [autoit][/autoit] [autoit][/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()
    Case $TabItem[GUICtrlRead($Tab)+1][1]
    If UBound($TabItem) > 2 Then
    $sel = GUICtrlRead($Tab)+1
    GUICtrlDelete($TabItem[$sel][1]) ; Close BUtton
    GUICtrlDelete($TabItem[$sel][2]) ; Input Feld
    GUICtrlDelete($TabItem[$sel][0]) ; Tab Item
    _ArrayDelete($TabItem,$sel)
    EndIf
    EndSwitch

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

    If GUICtrlRead($TabItem[GUICtrlRead($Tab)+1][2]) <> $TabItem[GUICtrlRead($Tab)+1][3] Then
    GUICtrlSetData($TabItem[GUICtrlRead($Tab)+1][0],GUICtrlRead($TabItem[GUICtrlRead($Tab)+1][2]))
    $TabItem[GUICtrlRead($Tab)+1][3] = GUICtrlRead($TabItem[GUICtrlRead($Tab)+1][2])
    EndIf
    WEnd

    [/autoit]

    EDIT: Mit der Version von Raupi geht das natürlich alles noch einfacher :D
    Mann, wo war ich wieder mit meinen Gedanken

    • Offizieller Beitrag
    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [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]
    $Sel = GUICtrlRead($Tab) + 1
    GUICtrlDelete($TabItem[$Sel])
    _ArrayDelete($TabItem, $Sel)
    _ArrayDelete($name, $Sel)
    _ArrayDelete($tab_close, $Sel)
    $Tab_ID -= 1
    ExitLoop
    EndSwitch
    Next
    WEnd

    [/autoit]
  • Vielen Dank!

    Den Durchblick zu behalten ist recht schwer, aber ich
    werde es schaffen. :D

    Wenn ich jetzt ein weiteres Element (z.B. Liste oder Button)
    auf einen Tab einbauen will, was muss ich dann ändern, damit
    sich z.B. der Button nur auf etwas in dem Tab (Liste) auswirkt?
    (Die Frage stelle ich, um etwas Überblick zu bekommen.xD)


    MfG
    qixx

    • Offizieller Beitrag

    Hast Glück das mir langweilig ist. Hab deinen Tabs um eine Listbox ,Label und Input erweitert. Selektierte Einträge werden in der Input angezeigt. Bei Übernahme kannst du deine Auswahl sehen.

    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 $sListBox = "Test1|Test2|Test3|Test4|Test5|Test6"
    Global $sListSel = "Test1"
    Global $String
    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]
    Dim $ListBox[2][2];ControlID und Selektierter Eintrag
    Dim $Auswahl[2]
    #Region #GUI
    $main_gui = GUICreate("Makro Manager", 405, 400, 437, 143)

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

    $new_tab = GUICtrlCreateButton("Neuer Tab", 19, 360, 101, 21, $WS_GROUP)
    $uebernehmen = GUICtrlCreateButton("Übernehmen", 200, 360, 101, 21, $WS_GROUP)
    $Tab = GUICtrlCreateTab(5, 10, 396, 380)
    $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
    $ListBox[$Tab_ID][0] = GUICtrlCreateList("", 10, 100, 200, 200)
    GUICtrlSetData(-1, $sListBox, $sListSel)
    GUICtrlCreateLabel("Aktuelle Auswahl : ", 250, 100, 100, 17)
    $Auswahl[$Tab_ID] = GUICtrlCreateInput("", 250, 130, 100, 17)
    $tab_close[$Tab_ID] = GUICtrlCreateButton("X", 380, 360, 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
    ReDim $ListBox[UBound($ListBox) + 1][2] ; Den Array für die Listbox
    ReDim $Auswahl[UBound($Auswahl) + 1]
    $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)
    $ListBox[$Tab_ID][0] = GUICtrlCreateList("", 10, 100, 200, 200)
    GUICtrlSetData(-1, $sListBox, $sListSel)
    GUICtrlCreateLabel("Aktuelle Auswahl : ", 250, 100, 100, 17)
    $Auswahl[$Tab_ID] = GUICtrlCreateInput("", 250, 130, 100, 17)
    $tab_close[$Tab_ID] = GUICtrlCreateButton("X", 380, 360, 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
    Case $uebernehmen
    $String = ""
    For $i = 1 To UBound($ListBox) - 1
    $String &= "Makro Nummer :" & $i &" Makrobezeichnung: "&GUICtrlRead($name[$i][0])& " Auswahl:" & $ListBox[$i][1] & @CRLF
    Next
    StringTrimRight($String, 1)
    MsgBox(0, "Info", $String)
    Case $new_tab
    InsertTab()
    Case $ListBox[1][0] To $ListBox[UBound($ListBox) - 1][0]
    $Sel = _GUICtrlTab_GetCurSel($Tab) + 1
    $ListBox[$Sel][1] = GUICtrlRead($ListBox[$Sel][0])
    GUICtrlSetData($Auswahl[$Sel], $ListBox[$Sel][1])
    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

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

    Case $tab_close[$i]
    $Sel = GUICtrlRead($Tab) + 1
    GUICtrlDelete($TabItem[$Sel])
    _ArrayDelete($TabItem, $Sel)
    _ArrayDelete($name, $Sel)
    _ArrayDelete($tab_close, $Sel)
    _ArrayDelete($ListBox, $Sel)
    $Tab_ID -= 1
    ExitLoop
    EndSwitch
    Next
    WEnd

    [/autoit]

    Aber mal so eine Frage am Rande. Willst du bei dem Script überhaut etwas selber machen?

  • Hast Glück das mir langweilig ist. Hab deinen Tabs um eine Listbox ,Label und Input erweitert. Selektierte Einträge werden in der Input angezeigt. Bei Übernahme kannst du deine Auswahl sehen.
    [...]
    Aber mal so eine Frage am Rande. Willst du bei dem Script überhaut etwas selber machen?

    xD
    Ja, will ich. :rofl:
    Ich hatte nur keine Ahnung, wie das ganze mit den Tabs undso funktioniert.
    Hab' mir ein hohes Zeil damit gesetzt und wusste von dem kaum was. :D
    Also ist nicht so, dass ich nichts kann, aber mit Tabs und Listen hatte ich mich
    zuvor nicht beschäftigt. Da ich jetzt aber ein ausführlicheres Programm schreibe,
    brauchte ich halt die Informationen.
    Ich mein', fragen kostet ja nichts und ihr helft doch anscheinend gerne. :P

    Jedenfalls vielen Dank dafür!


    MfG
    qixx

    • Offizieller Beitrag

    Wenn du das Script von mir und SEuBo(der größte Teil ist von Ihm) kapieren willst solltest du aber noch einiges im Bezug auf Array´s lernen.

    • Offizieller Beitrag

    Da hast du ja noch was zu knabbern. :D