Пример создания GUITreeView из одной темы с данного форума. Проблема в том что если повесить какой нибудь элемент на вкладку "General" например GUICtrlCreateGroup то этот элемент будет отображаться на всех последующих вкладках дерева, как возможно это убрать?
И второй вопрос. Как задать чтобы дерево уже было раскрыто при открытии $hGUI
:IL_AutoIt_1:
И второй вопрос. Как задать чтобы дерево уже было раскрыто при открытии $hGUI
:IL_AutoIt_1:
Код:
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GUITreeView.au3>
#include <Array.au3>
Global $DEF_ID
Global $aID[1]
$hGUI = GUICreate("Advanced TreeView Usage Demo", 350, 215)
$hTreeView = GUICtrlCreateTreeView(6, 6, 110, 150, -1, $WS_EX_STATICEDGE+$WS_EX_CLIENTEDGE)
GUICtrlCreateLabel("Advanced TreeView Usage Demo", 140, 10, 200, 20)
$hGeneral_TV = GUICtrlCreateTreeViewItem("General",$hTreeView)
AddControl($hTreeView,$hGeneral_TV)
$hAbout_TVItem = GUICtrlCreateTreeViewItem("About",$hGeneral_TV)
AddControl($hTreeView,$hAbout_TVItem)
AddControl($hTreeView,GUICtrlCreateLabel("About", 130, 10, 200, 30), $hAbout_TVItem)
GUICtrlSetFont(-1, 12, 800, 0, "Georgia")
AddControl($hTreeView,GUICtrlCreateLabel("This little scripts demonstates the using of a treeview-control.",190,70,100,60),$hAbout_TVItem)
$hBtMyButton=GUICtrlCreateButton("My Button", 190, 135, 70, 20)
AddControl($hTreeView,$hBtMyButton,$hAbout_TVItem)
$hComp_TVItem=GUICtrlCreateTreeViewItem("Computer",$hGeneral_TV)
AddControl($hTreeView,$hComp_TVItem)
AddControl($hTreeView,GUICtrlCreateLabel("Computer", 130, 10, 200, 30),$hComp_TVItem)
GUICtrlSetFont(-1, 12, 800, 0, "Georgia")
AddControl($hTreeView,GUICtrlCreateLabel( _
StringFormat("Name:\t%sOS:\n\t%s\nSP:\t%s", @ComputerName, @OSVersion, @OSServicePack), 120, 30, 200, 80),$hComp_TVItem)
$hUser_TVItem=GUICtrlCreateTreeViewItem("User",$hGeneral_TV)
AddControl($hTreeView,$hUser_TVItem)
AddControl($hTreeView,GUICtrlCreateLabel("User Name", 130, 10, 200, 30),$hUser_TVItem)
GUICtrlSetFont(-1, 12, 800, 0, "Georgia")
AddControl($hTreeView,GUICtrlCreateLabel("User Name: " & @Tab & @UserName, 120, 30, 200, 80),$hUser_TVItem)
$hDisplay_TV=GUICtrlCreateTreeViewItem("Display", $hTreeView)
AddControl($hTreeView,$hDisplay_TV)
$hResol_TVItem =GUICtrlCreateTreeViewItem("Resolution",$hDisplay_TV)
AddControl($hTreeView,$hResol_TVItem)
AddControl($hTreeView,GUICtrlCreateLabel("Resolution", 130, 10, 200, 30),$hResol_TVItem)
GUICtrlSetFont(-1, 12, 800, 0, "Georgia")
$hOther_TVItem =GUICtrlCreateTreeViewItem("Other", $hDisplay_TV)
AddControl($hTreeView,$hOther_TVItem)
AddControl($hTreeView,GUICtrlCreateLabel("Other", 130, 10, 200, 30),$hOther_TVItem)
GUICtrlSetFont(-1, 12, 800, 0, "Georgia")
AddControl($hTreeView,GUICtrlCreateLabel("Some Other Data Controls", 150, 50),$hOther_TVItem)
$AddControl_Button = GUICtrlCreateButton("Add Control", 10, 185, 70, 20)
$Exit_Button = GUICtrlCreateButton("Exit", 270, -1, '', '')
;------------------------------------------------------------------------------------------------
GUISetState()
While 1
$nMsg = GUIGetMsg()
$iItem_CtrlID = GUICtrlRead($hTreeView)
Switch $nMsg
Case -3,$Exit_Button
Exit
Case $iItem_CtrlID
If $DEF_ID=$iItem_CtrlID Then ContinueLoop
_CtrlSetState1($hTreeView,$iItem_CtrlID,$aID); ===>
Case $AddControl_Button
; If _GUICtrlTreeView_GetParentHandle($hTreeView,$iItem_CtrlID) =0 Then ContinueLoop ; **** Добавлено ***
AddControl($hTreeView,GUICtrlCreateLabel("New Control", 10, 160, 200, 20), $iItem_CtrlID,$GUI_SHOW)
GUICtrlSetColor(-1, 0xFF0000)
EndSwitch
WEnd
Func AddControl($hTV, $iCtrID, $iParentCtrlID=0,$iState=$GUI_HIDE)
$iInd = _ArraySearch($aID, $iParentCtrlID, 1, 0, 0, 1)
If $iParentCtrlID=0 Then
_ArrayAdd($aID,$iCtrID)
Else
_ArrayInsert($aID, $iInd, $iCtrID)
EndIf
GUICtrlSetState($iCtrID,$iState)
EndFunc
Func _CtrlSetState1($hTV,$iCtrlID,$aArray,$state=$GUI_SHOW)
;If _GUICtrlTreeView_GetParentHandle($hTV,$iCtrlID) =0 Then Return
$iIndex = _ArraySearch($aArray, $iCtrlID, 1, 0, 0, 1)
While 1
$iIndex-=1
; If _GUICtrlTreeView_GetText($hTV,$aArray[$iIndex]) <> '' Then ExitLoop
If _GUICtrlTreeView_GetText($hTV,$aArray[$iIndex]) <> '' Or $iIndex <1 Then ExitLoop
GUICtrlSetState($aArray[$iIndex], $state)
WEnd
If $state=$GUI_SHOW And $DEF_ID <>'' Then _CtrlSetState1($hTV, $DEF_ID,$aArray,$GUI_HIDE); Скрыть открытые прежде элементы
$DEF_ID=$iCtrlID
EndFunc