zamboni128 Posted June 17, 2012 Share Posted June 17, 2012 I have a treeview list with checkboxes and everything is working correctly when I use the mouse to check or uncheck the item. When I use the spacebar to check or uncheck the item, it only affects the item I'm on. I need to be able to disable the spacebar or when the spacebar is pressed, call a function to set the other items checked status. Questions: 1. Can the spacebar be disabled in a treeview? 2. Can a function be called when the user presses the spacebar in a treeview? Thanks in advance. Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted June 17, 2012 Moderators Share Posted June 17, 2012 zamboni128, Could you please post some reproducer code - anything we code ourselves is likely to be very different and so not helpful to you. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
zamboni128 Posted June 17, 2012 Author Share Posted June 17, 2012 (edited) I've attached my example code. If I select 1-6 with the mouse, 1-6-1, 1-1, Parent1 and Top are all checked. If I select 1-6 with the spacebar, only 1-6 is checked I just realized the file didn't upload...MyTreeViewExample.au3 Edited June 17, 2012 by zamboni128 Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted June 17, 2012 Moderators Share Posted June 17, 2012 zamboni128, That was fun! expandcollapse popup#region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_UseX64=n #endregion ;**** Directives created by AutoIt3Wrapper_GUI **** ;====================================================================================================================================== ; Program Name: MyTreeViewExample ; Description: This script is a demo of the treeview function. ; ; External Programs: None ; External Files: None ; Author: Robert Helgeson ; ; Asumptions: None ; ; Revision History: ; Version 1.0: Initial Release ; 06/15/2012 (RH) ; ;======================================================================================================================================#include <GUITreeView.au3> #region includes #include <Misc.au3> #include <GUITreeView.au3> #include <TreeViewConstants.au3> #include <WindowsConstants.au3> #include <GuiConstantsEX.au3> #endregion includes Global $hDLL = DllOpen("user32.dll") #region Define and create Treelist Local $hGUI = GUICreate('TreeView', 300, 700) Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES) Local $idTreeView = GUICtrlCreateTreeView(0, 0, 300, 700, $iStyle, $WS_EX_CLIENTEDGE) Global $hTreeView = GUICtrlGetHandle($idTreeView) _GUICtrlTreeView_BeginUpdate($hTreeView) ; Create the Treeview evtries entry $idTreeView_Top = GUICtrlCreateTreeViewItem("Top", $idTreeView) $hTreeView_Top = GUICtrlGetHandle($idTreeView_Top) Local $idParent1 = GUICtrlCreateTreeViewItem('Parent1', $idTreeView_Top) Local $hParent1 = GUICtrlGetHandle($idParent1) $idLevel2 = GUICtrlCreateTreeViewItem('1-1', $idParent1) For $i = 2 To 5 GUICtrlCreateTreeViewItem('1-' & $i, $idLevel2) Next $idLevel5 = GUICtrlCreateTreeViewItem('1-6', $idLevel2) GUICtrlCreateTreeViewItem('1-6-1', $idLevel5) $idLevel3 = GUICtrlCreateTreeViewItem('2-1', $idParent1) For $i = 2 To 5 GUICtrlCreateTreeViewItem('2-' & $i, $idLevel3) Next $idLevel4 = GUICtrlCreateTreeViewItem('3-1', $idParent1) For $i = 2 To 5 GUICtrlCreateTreeViewItem('3-' & $i, $idLevel4) Next For $i = 4 To 6 GUICtrlCreateTreeViewItem($i, $idParent1) Next Local $idParent2 = GUICtrlCreateTreeViewItem('Parent2', $idTreeView_Top) Local $hParent2 = GUICtrlGetHandle($idParent2) For $i = 1 To 5 GUICtrlCreateTreeViewItem('2-' & $i, $idParent2) Next Local $idParent3 = GUICtrlCreateTreeViewItem('Parent3', $idTreeView_Top) Local $hParent3 = GUICtrlGetHandle($idParent3) For $i = 1 To 5 GUICtrlCreateTreeViewItem('3-' & $i, $idParent3) Next Local $idParent4 = GUICtrlCreateTreeViewItem('Parent4', $idTreeView_Top) Local $hParent4 = GUICtrlGetHandle($idParent4) ; Expand all parents on startup _GUICtrlTreeView_SetState($hTreeView, $hTreeView_Top, $TVIS_EXPANDED) _GUICtrlTreeView_SetState($hTreeView, $hParent1, $TVIS_EXPANDED) _GUICtrlTreeView_SetState($hTreeView, GUICtrlGetHandle($idLevel5), $TVIS_EXPANDED) _GUICtrlTreeView_SetState($hTreeView, $hParent2, $TVIS_EXPANDED) _GUICtrlTreeView_SetState($hTreeView, GUICtrlGetHandle($idLevel2), $TVIS_EXPANDED) _GUICtrlTreeView_SetState($hTreeView, GUICtrlGetHandle($idLevel3), $TVIS_EXPANDED) _GUICtrlTreeView_SetState($hTreeView, GUICtrlGetHandle($idLevel4), $TVIS_EXPANDED) _GUICtrlTreeView_SetState($hTreeView, $hParent3, $TVIS_EXPANDED) _GUICtrlTreeView_SetState($hTreeView, $hParent4, $TVIS_EXPANDED) _GUICtrlTreeView_EndUpdate($hTreeView) GUISetState() #endregion Define and create Treelist #region Program Control While 1 $msg = GUIGetMsg() Select Case $msg = $GUI_EVENT_CLOSE DllClose($hDLL) _GUICtrlTreeView_Destroy($hTreeView) GUIDelete() Exit Case $msg = $GUI_EVENT_PRIMARYDOWN _Test_Check() EndSelect If _IsPressed("20", $hDLL) Then _Test_Check() While _IsPressed("20", $hDLL) Sleep(10) WEnd EndIf WEnd #endregion Program Control #region Functions Func _Test_Check() $hItem = _GUICtrlTreeView_GetSelection($hTreeView) ConsoleWrite(_GUICtrlTreeView_GetSelected($hTreeView, $hItem) & @CRLF) Switch _GUICtrlTreeView_GetChecked($hTreeView, $hItem) Case True ConsoleWrite("Checked" & @CRLF) $fChecked = True Case False ConsoleWrite("Not Checked" & @CRLF) $fChecked = False EndSwitch _TvCheckbox($hItem, $fChecked) EndFunc Func _TvCheckbox($hTvItem, $fTvCheck) ;-------------- Going up the tree ----------------------------------- _TvCheckboxParent($hTvItem, $fTvCheck) ;-------------- Going down the tree ----------------------------------- _TvCheckboxChild($hTvItem, $fTvCheck) EndFunc ;==>_TvCheckbox Func _TvCheckboxChild($hTvItem, $fTvCheck) Local $hFirst, $hNext $hFirst = _GUICtrlTreeView_GetFirstChild($hTreeView, $hTvItem) If $hFirst Then $hNext = $hFirst While $hNext _GUICtrlTreeView_SetChecked($hTreeView, $hNext, $fTvCheck) If _GUICtrlTreeView_GetFirstChild($hTreeView, $hNext) Then _TvCheckboxChild($hNext, $fTvCheck) EndIf $hNext = _GUICtrlTreeView_GetNextSibling($hTreeView, $hNext) WEnd EndIf EndFunc ;==>_TvCheckboxChild Func _TvCheckboxParent($hTvItem, $fTvCheck) Local $hFirst, $hNext, $bCheckedFlag If $fTvCheck Then $hTvParent = _GUICtrlTreeView_GetParentHandle($hTreeView, $hTvItem) If $hTvParent = 0 Then _GUICtrlTreeView_SetChecked($hTreeView, $hTvItem, $fTvCheck) Else $hFirst = _GUICtrlTreeView_GetParentHandle($hTreeView, $hTvItem) If $hFirst Then $hNext = $hFirst _GUICtrlTreeView_SetChecked($hTreeView, $hNext, $fTvCheck) If _GUICtrlTreeView_GetParentHandle($hTreeView, $hNext) Then _TvCheckboxParent($hNext, $fTvCheck) EndIf EndIf EndIf Else $hTvParent = _GUICtrlTreeView_GetParentHandle($hTreeView, $hTvItem) If $hTvParent = 0 Then ; reached the top of the list _GUICtrlTreeView_SetChecked($hTreeView, $hTvItem, $fTvCheck) Else $hNext = $hTvParent ; check to see if any siblings are checked $hSibling = _GUICtrlTreeView_GetFirstChild($hTreeView, $hNext) $bCheckedFlag = True While $hSibling > 0 If _GUICtrlTreeView_GetChecked($hTreeView, $hSibling) Then $bCheckedFlag = False ExitLoop EndIf $hSibling = _GUICtrlTreeView_GetNextSibling($hTreeView, $hSibling) WEnd If $bCheckedFlag Then _GUICtrlTreeView_SetChecked($hTreeView, $hNext, $fTvCheck) EndIf If _GUICtrlTreeView_GetParentHandle($hTreeView, $hNext) Then _TvCheckboxParent($hNext, $fTvCheck) EndIf EndIf EndIf EndFunc ;==>_TvCheckboxParent #endregion Functions M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
zamboni128 Posted June 17, 2012 Author Share Posted June 17, 2012 Thanks Melba23That worked perfect. Thank you for responding so quickly. Link to comment Share on other sites More sharing options...
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