Opened 17 years ago
Last modified 17 years ago
#243 closed Bug
ListView control on Tab and WM_NOTIFY Event error + reproduction. — at Version 2
Reported by: | Shlomikalfa@… | Owned by: | |
---|---|---|---|
Milestone: | Component: | AutoIt | |
Version: | 3.2.11.10 | Severity: | None |
Keywords: | Cc: |
Description (last modified by Valik)
[Description]
I have a listview obj, created using the built-in inside a TAB at the 2nd TAB.
the items are inserted using a _UDF someone has donated in the forum...
it is being monitored by WM_Notify [just like in the help file].
when i click on entry #3, Row #4 of the listview, the TAB always switches to it's first TAB item.
[Reproduction]
#include <GuiConstantsEx.au3> #include <GuiListView.au3> #include <GuiImageList.au3> #include <WindowsConstants.au3> Opt("GUIOnEventMode", 1) ;$Debug_LV = False ; Check ClassName being passed to ListView functions, set to True and use a handle to another control to see it work Global $hListView _Main() Func _Main() Local $GUI, $hImage $GUI = GUICreate("(UDF Created) ListView Create", 500, 400) GUISetOnEvent($GUI_EVENT_CLOSE, "ExitProg") $TAB = GUICtrlCreateTab(0, 0, 498, 398) ;GUICtrlSetOnEvent(-1, "TabsChanger") ; UNTICK ME IF U WANT TO SEE THE MSG. $Tab0 = GUICtrlCreateTabItem("ItemNumber0") GUICtrlSetOnEvent(-1, "TabsChanger") $Tab1 = GUICtrlCreateTabItem("ItemNumber1") GUICtrlSetOnEvent(-1, "TabsChanger") $hListView = GUICtrlCreateListView("#|A|B|C|D|E|F|G|H|I|J|K|L|M", 2, 22, 394, 268) ;$hListView = _GUICtrlListView_Create($GUI, "#|A|B|C|D|E|F|G|H|I|J|K|L|M", 2, 2, 394, 268) ;;;>> Doesn't create the listview on the tab required but for entire $GUI. [However, if this is used the issue is gone, maybe because of the Listview location...] _GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES)) GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") ; Load items For $i = 0 To 20 MyGUICtrlCreateListViewItem($i&"|BLAA|ASDA|ASDASD|ASDASD|ASDASD|ASDASD", $hListView) ;;; USING THIS FUNCTION >> ;;; because of _UDF lack of ability to support unicode properly. ;;; because of built-in flickering property, [it just flashes like a milion times during the updates]. Next $Tab2 = GUICtrlCreateTabItem("ItemNumber2") GUICtrlSetOnEvent(-1, "TabsChanger") GUICtrlCreateTabItem("") GUISetState() ; Loop until user exits While 1 WEnd EndFunc ;==>_Main Func ExitProg() Exit EndFunc Func TabsChanger() MsgBox(0, "IF I AM HERE??", "HERE IS THE BUG") EndFunc Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam) #forceref $hWnd, $iMsg, $iwParam Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo ;~ Local $tBuffer $hWndListView = $hListView If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView) $tNMHDR = DllStructCreate($tagNMHDR, $ilParam) $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom")) $iIDFrom = DllStructGetData($tNMHDR, "IDFrom") $iCode = DllStructGetData($tNMHDR, "Code") Switch $hWndFrom Case $hWndListView Switch $iCode Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam) _DebugPrint("$NM_CLICK" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _ "-->IDFrom:" & @TAB & $iIDFrom & @LF & _ "-->Code:" & @TAB & $iCode & @LF & _ "-->Index:" & @TAB & DllStructGetData($tInfo, "Index") & @LF & _ "-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @LF & _ "-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @LF & _ "-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @LF & _ "-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @LF & _ "-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @LF & _ "-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @LF & _ "-->lParam:" & @TAB & DllStructGetData($tInfo, "lParam") & @LF & _ "-->KeyFlags:" & @TAB & DllStructGetData($tInfo, "KeyFlags")) EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_NOTIFY Func _DebugPrint($s_text, $line = @ScriptLineNumber) ConsoleWrite( _ "!===========================================================" & @LF & _ "+======================================================" & @LF & _ "-->Line(" & StringFormat("%04d", $line) & "):" & @TAB & $s_text & @LF & _ "+======================================================" & @LF) EndFunc ;==>_DebugPrint ; #FUNCTION# ==================================================================================================== ================ ; Name...........: MyGUICtrlCreateListViewItem ; Description ...: Create and insert items directly into the listview, Unicode supported! ; Syntax.........: MyGUICtrlCreateListViewItem($sText, $nCtrlID[, $nIndex = -1]) ; Parameters ....: $sText - Text of the item and subitems seperated by seperation char. [Default "|"] ; $nCtrlID - Listview control ID. ; $nIndex - Item's index. [Default -1, will add at last location] ; Return values .: Nothing. ; Author ........: Unknown, Supplied by: ChrisL @ http://www.autoitscript.com/forum/index.ph...st&p=515453 ; Modified.......: Armand. {Unicode support} ; ==================================================================================================== =========================== Func MyGUICtrlCreateListViewItem($sText, $nCtrlID, $nIndex = -1) Local $stLvItem = DllStructCreate("uint;int;int;uint;uint;ptr;int;int;int;int;") Local $stText = DllStructCreate("wchar[260]") Local $arText = StringSplit($sText, "|") If $nIndex = -1 Then $nIndex = GUICtrlSendMsg($nCtrlID, $LVM_GETITEMCOUNT, 0, 0) DllStructSetData($stText, 1, $arText[1]); Save the item text in the struct DllStructSetData($stLvItem, 1, BitOR($LVIF_TEXT, $LVIF_PARAM)) DllStructSetData($stLvItem, 2, $nIndex) DllStructSetData($stLvItem, 6, DllStructGetPtr($stText)) ; Set the lParam of the struct to the line index - unique within the listview DllStructSetData($stLvItem, 9, $nIndex) $nIndex = GUICtrlSendMsg($nCtrlID, $LVM_INSERTITEMW, 0, DllStructGetPtr($stLvItem)) If $nIndex > -1 Then ; Insert now the rest of the column text For $i = 2 To $arText[0] DllStructSetData($stText, 1, $arText[$i]) DllStructSetData($stLvItem, 3, $i - 1); Store the subitem index GUICtrlSendMsg($nCtrlID, $LVM_SETITEMTEXTW, $nIndex, DllStructGetPtr($stLvItem)) Next EndIf $stText = 0 $stLvItem = 0 EndFunc ;==>MyGUICtrlCreateListViewItem
Change History (2)
comment:1 Changed 17 years ago by Valik
comment:2 Changed 17 years ago by Valik
- Description modified (diff)
Note: See
TracTickets for help on using
tickets.
The problem is likely related to issue #222.