- Offizieller Beitrag
In einem Treeview lassen sich die Checkboxen mit Mausklick oder durch Drücken der Leertaste un/checken. Ich möchte nun die Leertasten-Funktion verhindern.
Mein Gedanke war:
- TVN_KEYDOWN abfragen
- Prüfen ob Leertaste das Event ausgelöst hat - wenn ja: "Return 1" um Normalverhalten zu unterbinden.
Aber leider reagiert die Checkbox trotzdem. Also ist das Event TVN_KEYDOWN wohl ungeeignet, da die Markierung der Checkbox scheinbar stattfindet ehe dieses Event ausgelöst wird.
Nun habe ich im Moment keine Idee, wie ich die Leertaste verhindern kann...
AutoIt
#include <TreeViewConstants.au3>
#include <StructureConstants.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
Global $hTreeview
_Test()
Func _Test()
GUICreate('Test', 210, 210)
Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES)
Local $idTreeview = GUICtrlCreateTreeView(15, 15, 180, 180, $iStyle, $WS_EX_CLIENTEDGE)
$hTreeview = GUICtrlGetHandle(-1)
For $i = 0 To 9
GUICtrlCreateTreeViewItem('Item ' & $i, $idTreeview)
Next
GuiRegisterMsg($WM_NOTIFY, '_WM_NOTIFY')
GUISetState()
Do
Until GUIGetMsg() = -3
EndFunc
Func _WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $wParam
Local $hWndFrom, $tNMHDR, $iCode
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hTreeview
Switch $iCode
Case $TVN_KEYDOWN
Local $tagTVKEYDOWN = $tagNMHDR & ';WORD wVKey;UINT flags'
Local $tTVKEYDOWN = DllStructCreate($tagTVKEYDOWN, $lParam)
Local $vKey = DllStructGetData($tTVKEYDOWN, 'wVKey')
ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & " var: $vKey --> " & $vKey & @LF)
If $vKey = 32 Then Return 1 ; Leertaste >> kein Normalverhalten gewünscht (Checkbox soll nicht reagieren)
Case $TVN_SELCHANGEDA, $TVN_SELCHANGEDW
Local $tNMTREEVIEW = DllStructCreate($tagNMTREEVIEW, $lParam)
Switch DllStructGetData($tNMTREEVIEW, 'Action')
Case $TVC_BYKEYBOARD
ConsoleWrite('TVC_BYKEYBOARD' & @CRLF)
Case $TVC_BYMOUSE
ConsoleWrite('TVC_BYMOUSE' & @CRLF)
Case $TVC_UNKNOWN
ConsoleWrite('TVC_UNKNOWN' & @CRLF)
EndSwitch
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
Alles anzeigen