unabhängige Treeviews in Tabs

  • Hallo Leute,

    ich hab noch nicht soviel Erfahrung in autoit und jetzt ein Problem bei dem ich nicht mehr weiterkomme.

    Ich will Treeviews in Tabs erstellen. Die Treeviews allerdings sollen unabhängig voneinander sein. Mein Problem ist nun, dass wenn ich eine neuen Tab(Konfiguration) erstelle(im Menü File->new Config), die Treeview aus der vorherigen Konfiguration übernommen wird. Wenn ich einen neuen Ordner hinzufüge, wird er auch bei allen anderen Tabs übernommen. Ich möchte aber für jeden Tab unabhängige Treeviews.

    Ich hoffe ihr habt mein Problem verstanden.

    Hier mein Code:

    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <TreeViewConstants.au3>
    #include <StaticConstants.au3>
    #include <GuiTreeView.au3>
    #include <File.au3>
    #include <GuiTab.au3>

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

    Opt("GUIOnEventMode", 1)
    Opt("GUIResizeMode", 1)

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

    Local $pathtosource=""
    Local $mainwindow
    Local $filemenu
    Local $treeFolder ;parent in treeview
    Local $treeview[10] ;handle for treeview start element
    Local $n_config=0 ;number of configs
    Local $tab
    Local $tabi[10]
    Local $addFolderButton[10]

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

    $mainwindow =GUICreate("Tester",640,480,(@DesktopWidth - 640)/2, (@DesktopHeight - 480)/2)

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

    ;create menu
    $filemenu = GUICtrlCreateMenu("&File")
    $configitem = GUICtrlCreateMenuItem("new Config", $filemenu)
    GUICtrlSetOnEvent($configitem,"CreateConfig")
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")

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

    ;create
    $tab=_GUICtrlTab_Create($mainwindow,0,0,640,480)

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

    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(10) ; Idle around
    WEnd

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

    #cs ###################################ParseFilesForTreeview #######################################################

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

    input: folder where your targetfiles are
    function : looks for c- and h- files and creates a parent - treeview item for the path and a - child item for each files

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

    #ce ;##################################ParseFilesForTreeview #######################################################

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

    Func ParseFilesForTreeview($folder)

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

    $current_tab=_GUICtrlTab_GetCurSel($tab)

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

    _GUICtrlTreeView_BeginUpdate($treeview[$current_tab])

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

    $treeFolder=_GUICtrlTreeView_Add($treeview[$current_tab],0,$folder)

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

    $cFiles=_FileListToArray($folder,"*.c")
    if @error<>4 then ;files found
    for $i=1 to $cFiles[0]
    $controllID=_GUICtrlTreeView_AddChild($treeview[$current_tab],$treeFolder,$cFiles[$i])
    Next
    EndIf

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

    $hFiles=_FileListToArray($folder,"*.h")
    if @error<>4 then ; files found
    for $i=1 to $hFiles[0]
    $controllID=_GUICtrlTreeView_AddChild($treeview[$current_tab],$treeFolder,$hFiles[$i])
    Next
    EndIf
    _GUICtrlTreeView_EndUpdate($treeview[$current_tab])

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

    EndFunc

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

    #cs ################################### CreateConfig #######################################################

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

    function : create config and tab window

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

    #ce ;################################## CreateConfig end ###################################################

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

    Func CreateConfig()
    $tabi[$n_config]=_GUICtrlTab_InsertItem($tab,$n_config,"Config"& $n_config)
    ;GUICtrlSetState($tabi[$n_config],$GUI_FOCUS)
    $treeview[$n_config]=_GUICtrlTreeView_Create($tab,6,30,280,400,BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES), $WS_EX_CLIENTEDGE)
    $addFolderButton=GUICtrlCreateButton("Add Folder",6,440,280,20)
    GUICtrlSetOnEvent($addFolderButton, "AddFolder")
    $n_config = $n_config + 1;
    EndFunc

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

    #cs ###################################### AddFolder #######################################################

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

    function : create config and tab window

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

    #ce ;##################################### AddFolder end ###################################################

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

    Func AddFolder()
    $folder = FileSelectFolder("Choose folder ...",$pathtosource)
    if @error==1 Then
    Return
    EndIf
    ParseFilesForTreeview($folder)
    EndFunc

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

    Func CLOSEClicked()
    Exit
    EndFunc

    [/autoit]

    Grüße
    Fuxxx

  • Hallo fuxxx,

    schau dir einfach einmal dieses Skript an:

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <guitab.au3>
    #include <guitreeview.au3>

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

    Opt('GUIOnEventMode', 1)
    Opt('MustDeclareVars', 1)

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

    Global $hGui, $hTab, $hbtnInsTab, $hbtnNewTabItem, $hbtnOK, $hTabGui[10], $hnewTree[10], $nextTabID = 0, $aktTabID = -1

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

    $hGui = GUICreate("Multiple TABs", 520, 250, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SIZEBOX));BitOr($GUI_SS_DEFAULT_GUI,$WS_CLIPSIBLINGS))
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
    $hTab = GUICtrlCreateTab(5, 5, 510, 25)
    GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKHEIGHT)
    GUICtrlSetOnEvent(-1, '_SwitchTab')
    $hbtnInsTab = GUICtrlCreateButton("Neuer Tab", 40, 200, 70, 20)
    GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKBOTTOM + $GUI_DOCKSIZE)
    GUICtrlSetOnEvent(-1, 'InsertTab')
    $hbtnNewTabItem = GUICtrlCreateButton("&Neues TabItem", 150, 200, 70, 20)
    GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKBOTTOM + $GUI_DOCKSIZE)
    GUICtrlSetOnEvent(-1, 'NewItem')
    ;GUICtrlSetState(-1,$GUI_HIDE)
    $hbtnOK = GUICtrlCreateButton("Be&enden", 350, 200, 70, 20)
    GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKBOTTOM + $GUI_DOCKSIZE)
    GUICtrlSetOnEvent(-1, '_End')
    GUISetState()
    GUIRegisterMsg($WM_SIZE, 'WM_SIZE')
    GUISetState()
    While 1
    Sleep(125)
    WEnd

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

    Func _End()
    Exit
    EndFunc ;==>_End

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

    Func _SwitchTab()
    Local $i = _GUICtrlTab_GetCurSel($hTab)
    If $aktTabID = -1 Then $aktTabID = 0
    ConsoleWrite($i & @CRLF)
    GUISetState(@SW_HIDE, $hTabGui[$aktTabID])
    GUISetState(@SW_SHOW, $hTabGui[$i])
    $aktTabID = $i
    EndFunc ;==>_SwitchTab

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

    Func InsertTab()
    ConsoleWrite($nextTabID & @CRLF)
    _GUICtrlTab_InsertItem($hTab, $nextTabID, "Tab " & $nextTabID)
    $hTabGui[$nextTabID] = GUICreate("", 500, 150, 10, 25, BitOR($WS_CHILD, $WS_TABSTOP), -1, $hGui)
    GUISetBkColor(0xff0000)
    Size_TabGui($nextTabID)
    GUISetState()
    GUISwitch($hTabGui[$nextTabID])
    $hnewTree[$nextTabID] = GUICtrlCreateTreeView(5, 5, 490, 140)
    ;GUICtrlSetResizing(-1, $GUI_DOCKLeft + $GUI_DOCKBOTTOM + $GUI_DOCKRIGHT + $GUI_DOCKTOP)
    GUICtrlCreateTreeViewItem("Tree" & $nextTabID & " Item 1", $hnewTree[$nextTabID])
    GUICtrlCreateTreeViewItem("Tree" & $nextTabID & " Item 2", $hnewTree[$nextTabID])
    If $aktTabID > -1 Then GUISetState(@SW_HIDE, $hTabGui[$aktTabID])
    _GUICtrlTab_SetCurFocus($hTab, $nextTabID)
    GUISetState($GUI_SHOW, $hTabGui[$nextTabID])
    $aktTabID = $nextTabID
    $nextTabID = $nextTabID + 1
    ;GUICtrlSetState($hbtnInsTab,$GUI_SHOW)
    EndFunc ;==>InsertTab

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

    Func NewItem()
    GUICtrlCreateTreeViewItem("Tree" & $aktTabID & " Item " & random(3,20,1), $hnewTree[$aktTabID])
    EndFunc

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

    Func WM_SIZE($hWnd, $iMsg, $iWParam, $iLParam)
    Local $i
    For $i = 0 To $nextTabID - 1
    Size_TabGui($i)
    Next
    EndFunc ;==>WM_SIZE

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

    Func Size_TabGui($i)
    Local $aMGPos
    $aMGPos = WinGetClientSize($hGui)
    WinMove($hTabGui[$i], "", 5, 25, $aMGPos[0] - 10, $aMGPos[1] - 60)
    GUICtrlSetPos($hnewTree[$i],5, 5, $aMGPos[0]-20, $aMGPos[1] - 70)
    EndFunc ;==>Size_TabGui

    [/autoit]

    nicht die eleganteste Lösung um dynamisch Tabs, TreeViews und TreeViewItems zu erzeugen aber es sollte dir weiter helfen,

    mfg (Auto)Bert

    4 Mal editiert, zuletzt von AutoBert (6. Oktober 2009 um 10:34)