DigDeep Posted October 29, 2015 Posted October 29, 2015 (edited) Hi,I need some help here. My below code works fine except for few options.1. When I select the check boxes, I want the text written in selected Checkboxes be copied. I tried few options but Copy button does not copies the selected Checkboxes.2. I also need 2 more buttons for Expand all and Collaps all.3. When I open this code, the treeview displays from the extreme top of the screen. I want to add some lines as space for better view. But as I created these are Treeview rather than CheckBox views I am not able to get them adjusted.Can someone please help me here. expandcollapse popup; Create flag to indicate item selection change Global $ItemSelected = False ; Create array to hold item data Global $TreeMenu[17][3] ; Create GUI Global $CT = GUICreate("CT", 1896, 984, 3, 2, BitOR($GUI_SS_DEFAULT_GUI, $WS_MAXIMIZEBOX, $WS_SIZEBOX, $WS_THICKFRAME, $WS_TABSTOP)) ; Create TreeView Global $Check = GUICtrlCreateTreeView(10, 10, 600, 900, BitOR($GUI_SS_DEFAULT_TREEVIEW, $TVS_CHECKBOXES, $TVS_HASLINES, $TVS_NONEVENHEIGHT)) ;$Label1 = GUICtrlCreateLabel("SCCM Scenarios", 472, 16, 45, 20) ; Fill TreeView $TreeMenu[0][2] = GUICtrlCreateTreeViewItem(" Option 1", $Check) $TreeMenu[1][2] = GUICtrlCreateTreeViewItem(" True", $TreeMenu[0][2]) $TreeMenu[2][2] = GUICtrlCreateTreeViewItem(" ABC", $TreeMenu[1][2]) $TreeMenu[3][2] = GUICtrlCreateTreeViewItem(" False", $TreeMenu[0][2]) $TreeMenu[4][2] = GUICtrlCreateTreeViewItem(" DEF", $TreeMenu[3][2]) $TreeMenu[5][2] = GUICtrlCreateTreeViewItem(" GHI", $TreeMenu[4][2]) $TreeMenu[6][2] = GUICtrlCreateTreeViewItem(" MayBe", $TreeMenu[0][2]) $TreeMenu[7][2] = GUICtrlCreateTreeViewItem(" JKL", $TreeMenu[6][2]) $TreeMenu[7][2] = GUICtrlCreateTreeViewItem(" Option 2", $Check) $TreeMenu[8][2] = GUICtrlCreateTreeViewItem(" True", $TreeMenu[7][2]) $TreeMenu[9][2] = GUICtrlCreateTreeViewItem(" MNO", $TreeMenu[8][2]) $TreeMenu[10][2] = GUICtrlCreateTreeViewItem(" False", $TreeMenu[7][2]) $TreeMenu[11][2] = GUICtrlCreateTreeViewItem(" PQR", $TreeMenu[10][2]) $TreeMenu[12][2] = GUICtrlCreateTreeViewItem(" STU", $TreeMenu[11][2]) ; Set initial unchecked state and get item handles (needed for later code) For $i = 0 To UBound($TreeMenu) - 1 $TreeMenu[$i][1] = False $TreeMenu[$i][0] = GUICtrlGetHandle($TreeMenu[$i][2]) Next ; Expand TreeView ;_GUICtrlTreeView_Expand($Check) ; Create buttons to set/clear all items Global $Select_All = GUICtrlCreateButton("Select All", 20, 930, 144, 30) Global $Clear_All = GUICtrlCreateButton("Clear All", 188, 930, 152, 30) Global $Copy = GUICtrlCreateButton("Submit", 448, 928, 147, 33) GUISetState() ; Register message to look for TV item selection change GUIRegisterMsg($WM_NOTIFY, "_WM_NOTIFY") #EndRegion ### END Koda GUI section ### Global $bState, $iItemIndex, $sChkValues While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $Select_All _Adjust_All() Case $Clear_All _Adjust_All(False) Case $Copy ; Copy to Clipboard EndSwitch Edited October 29, 2015 by DigDeep
AutoBert Posted October 29, 2015 Posted October 29, 2015 Please post a runable script:>"C:\Program Files\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "C:\Users\Bert\AutoIt3.My\Test\treviewCheckBoxes.au3" /UserParams +>17:50:31 Starting AutoIt3Wrapper v.14.801.2025.0 SciTE v.3.4.4.0 Keyboard:00000407 OS:WIN_81/ CPU:X64 OS:X64 Environment(Language:0407) +> SciTEDir => C:\Program Files\AutoIt3\SciTE UserDir => C:\Users\Bert\AppData\Local\AutoIt v3\SciTE\AutoIt3Wrapper SCITE_USERHOME => C:\Users\Bert\AppData\Local\AutoIt v3\SciTE +>Check for missing standard constants/udf include files: 3 include(s) were added >Running AU3Check (3.3.14.1) from:C:\Program Files\AutoIt3 input:C:\Users\Bert\AutoIt3.My\Test\treviewCheckBoxes.au3 "C:\Users\Bert\AutoIt3.My\Test\treviewCheckBoxes.au3"(77,5) : error: missing Wend. EndSwitch ~~~~^ "C:\Users\Bert\AutoIt3.My\Test\treviewCheckBoxes.au3"(61,1) : REF: missing Wend. While ^ "C:\Users\Bert\AutoIt3.My\Test\treviewCheckBoxes.au3"(57,40) : error: _WM_NOTIFY(): undefined function. GUIRegisterMsg($WM_NOTIFY, "_WM_NOTIFY") ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\treviewCheckBoxes.au3"(67,25) : error: _Adjust_All(): undefined function. _Adjust_All() ~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Users\Bert\AutoIt3.My\Test\treviewCheckBoxes.au3 - 3 error(s), 0 warning(s) !>17:50:33 AU3Check ended. Press F4 to jump to next error.rc:2 +>17:50:34 AutoIt3Wrapper Finished. >Exit code: 2 Time: 2.894and i added 3 includes before these errors: #include <GUIConstantsEx.au3>#include <TreeViewConstants.au3>#include <WindowsConstants.au3>
DigDeep Posted October 29, 2015 Author Posted October 29, 2015 Here's the code...expandcollapse popup#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <GuiTreeView.au3> #include <Array.au3> #Region ### START Koda GUI section ### Form= ; Create flag to indicate item selection change Global $ItemSelected = False ; Create array to hold item data Global $TreeMenu[17][3] ; Create GUI Global $CT = GUICreate("CT", 1896, 984, 3, 2, BitOR($GUI_SS_DEFAULT_GUI, $WS_MAXIMIZEBOX, $WS_SIZEBOX, $WS_THICKFRAME, $WS_TABSTOP)) ; Create TreeView Global $Check = GUICtrlCreateTreeView(10, 10, 600, 900, BitOR($GUI_SS_DEFAULT_TREEVIEW, $TVS_CHECKBOXES, $TVS_HASLINES, $TVS_NONEVENHEIGHT)) ;$Label1 = GUICtrlCreateLabel("SCCM Scenarios", 472, 16, 45, 20) ; Fill TreeView $TreeMenu[0][2] = GUICtrlCreateTreeViewItem(" Option 1", $Check) $TreeMenu[1][2] = GUICtrlCreateTreeViewItem(" True", $TreeMenu[0][2]) $TreeMenu[2][2] = GUICtrlCreateTreeViewItem(" ABC", $TreeMenu[1][2]) $TreeMenu[3][2] = GUICtrlCreateTreeViewItem(" False", $TreeMenu[0][2]) $TreeMenu[4][2] = GUICtrlCreateTreeViewItem(" DEF", $TreeMenu[3][2]) $TreeMenu[5][2] = GUICtrlCreateTreeViewItem(" GHI", $TreeMenu[4][2]) $TreeMenu[6][2] = GUICtrlCreateTreeViewItem(" MayBe", $TreeMenu[0][2]) $TreeMenu[7][2] = GUICtrlCreateTreeViewItem(" JKL", $TreeMenu[6][2]) $TreeMenu[7][2] = GUICtrlCreateTreeViewItem(" Option 2", $Check) $TreeMenu[8][2] = GUICtrlCreateTreeViewItem(" True", $TreeMenu[7][2]) $TreeMenu[9][2] = GUICtrlCreateTreeViewItem(" MNO", $TreeMenu[8][2]) $TreeMenu[10][2] = GUICtrlCreateTreeViewItem(" False", $TreeMenu[7][2]) $TreeMenu[11][2] = GUICtrlCreateTreeViewItem(" PQR", $TreeMenu[10][2]) $TreeMenu[12][2] = GUICtrlCreateTreeViewItem(" STU", $TreeMenu[11][2]) ; Set initial unchecked state and get item handles (needed for later code) For $i = 0 To UBound($TreeMenu) - 1 $TreeMenu[$i][1] = False $TreeMenu[$i][0] = GUICtrlGetHandle($TreeMenu[$i][2]) Next ; Expand TreeView ;_GUICtrlTreeView_Expand($Check) ; Create buttons to set/clear all items Global $Select_All = GUICtrlCreateButton("Select All", 20, 930, 144, 30) Global $Clear_All = GUICtrlCreateButton("Clear All", 188, 930, 152, 30) Global $Copy = GUICtrlCreateButton("Submit", 448, 928, 147, 33) GUISetState() ; Register message to look for TV item selection change GUIRegisterMsg($WM_NOTIFY, "_WM_NOTIFY") #EndRegion ### END Koda GUI section ### Global $bState, $iItemIndex, $sChkValues While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $Select_All _Adjust_All() Case $Clear_All _Adjust_All(False) Case $Copy ; Copy to Clipboard EndSwitch ; An item has been selected If $ItemSelected Then ; Determine checked state $bState = _GUICtrlTreeView_GetChecked($Check, $ItemSelected) ; Find item in array $iItemIndex = _ArraySearch($TreeMenu, $ItemSelected) ; If checked state has altered If $TreeMenu[$iItemIndex][1] <> $bState Then ; Store new state $TreeMenu[$iItemIndex][1] = $bState ; Adjust parents and children as required _Adjust_Parents($ItemSelected, $bState) _Adjust_Children($ItemSelected, $bState) EndIf ; Clear flag $ItemSelected = 0 EndIf WEnd Func _Adjust_All($bState = True) ; Loop through items For $i = 0 To UBound($TreeMenu) - 1 ; Adjust item _GUICtrlTreeView_SetChecked($Check, $TreeMenu[$i][0], $bState) ; Adjust array $TreeMenu[$i][1] = $bState Next EndFunc ;==>_Adjust_All Func _Adjust_Parents($hPassedItem, $bState = True) Local $iIndex ; Get the handle of the parent Local $hParent = _GUICtrlTreeView_GetParentHandle($Check, $hPassedItem) If $hParent = 0 Then Return ; Assume parent is to be adjusted Local $bAdjustParent = True ; Need to confirm all siblings clear before clearing parent If $bState = False Then ; Check on number of siblings Local $iCount = _GUICtrlTreeView_GetChildCount($Check, $hParent) ; If only 1 sibling then parent can be cleared - if more then need to look at them all If $iCount <> 1 Then ; Number of siblings checked Local $iCheckCount = 0 ; Move through previous siblings Local $hSibling = $hPassedItem While 1 $hSibling = _GUICtrlTreeView_GetPrevSibling($Check, $hSibling) ; If found If $hSibling Then ; Is sibling checked) If _GUICtrlTreeView_GetChecked($Check, $hSibling) Then ; Increase count if so $iCheckCount += 1 EndIf Else ; No point in continuing ExitLoop EndIf WEnd ; Move through later siblings $hSibling = $hPassedItem While 1 $hSibling = _GUICtrlTreeView_GetNextSibling($Check, $hSibling) If $hSibling Then If _GUICtrlTreeView_GetChecked($Check, $hSibling) Then $iCheckCount += 1 EndIf Else ExitLoop EndIf WEnd ; If at least one sibling checked then do not clear parent If $iCheckCount Then $bAdjustParent = False EndIf EndIf ; If parent is to be adjusted If $bAdjustParent Then ; Adjust the array $iIndex = _ArraySearch($TreeMenu, $hParent) If @error Then Return $TreeMenu[$iIndex][1] = $bState ; Adjust the parent _GUICtrlTreeView_SetChecked($Check, $hParent, $bState) ; And now do the same for the generation above _Adjust_Parents($hParent, $bState) EndIf EndFunc ;==>_Check_Parents Func _Adjust_Children($hPassedItem, $bState = True) Local $iIndex ; Get the handle of the first child Local $hChild = _GUICtrlTreeView_GetFirstChild($Check, $hPassedItem) If $hChild = 0 Then Return ; Loop through children While 1 ; Adjust the array $iIndex = _ArraySearch($TreeMenu, $hChild) If @error Then Return $TreeMenu[$iIndex][1] = $bState ; Adjust the child _GUICtrlTreeView_SetChecked($Check, $hChild, $bState) ; And now do the same for the generation beow _Adjust_Children($hChild, $bState) ; Now get next child $hChild = _GUICtrlTreeView_GetNextChild($Check, $hChild) ; Exit the loop if no more found If $hChild = 0 Then ExitLoop WEnd EndFunc ;==>_Adjust_Children Func _WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam ; Create NMTREEVIEW structure Local $tStruct = DllStructCreate("struct;hwnd hWndFrom;uint_ptr IDFrom;INT Code;endstruct;" & _ "uint Action;struct;uint OldMask;handle OldhItem;uint OldState;uint OldStateMask;" & _ "ptr OldText;int OldTextMax;int OldImage;int OldSelectedImage;int OldChildren;lparam OldParam;endstruct;" & _ "struct;uint NewMask;handle NewhItem;uint NewState;uint NewStateMask;" & _ "ptr NewText;int NewTextMax;int NewImage;int NewSelectedImage;int NewChildren;lparam NewParam;endstruct;" & _ "struct;long PointX;long PointY;endstruct", $lParam) Local $hWndFrom = DllStructGetData($tStruct, "hWndFrom") If $hWndFrom = GUICtrlGetHandle($Check) Then Switch DllStructGetData($tStruct, "Code") Case $TVN_SELCHANGEDA, $TVN_SELCHANGEDW Local $hItem = DllStructGetData($tStruct, "NewhItem") ; Set flag to selected item handle If $hItem Then $ItemSelected = $hItem EndSwitch EndIf EndFunc
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now