Baloven1
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору народ, помогите с такой проблемой, вот примерный код (навая версия): Код: #include <GuiConstantsEx.au3> #include <GuiListView.au3> #include <GuiStatusBar.au3> Opt('MustDeclareVars', 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, $hStatus Example_Internal() Func Example_Internal() Local $hGUI $hGUI = GUICreate("(Internal) ListView Get Hot Item", 392, 322) $hListView = GUICtrlCreateListView("", 2, 2, 394, 268) $hListView = GUICtrlGetHandle($hListView) _GUICtrlListView_SetExtendedListViewStyle ($hListView, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $LVS_EX_TRACKSELECT)) GUISetState() ; Add columns _GuiCtrlListView_AddColumn ($hListView, "Column 1", 100) _GuiCtrlListView_AddColumn ($hListView, "Column 2", 100) _GuiCtrlListView_AddColumn ($hListView, "Column 3", 100) ; Add items _GuiCtrlListView_AddItem ($hListView, "Row 1: Col 1") _GuiCtrlListView_AddSubItem ($hListView, 0, "Row 1: Col 2", 1) _GuiCtrlListView_AddSubItem ($hListView, 0, "Row 1: Col 3", 2) _GuiCtrlListView_AddItem ($hListView, "Row 2: Col 1") _GuiCtrlListView_AddSubItem ($hListView, 1, "Row 2: Col 2", 1) _GuiCtrlListView_AddItem ($hListView, "Row 3: Col 1") ;Register WM_NOTIFY events GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") ; Loop until user exits Do Until GUIGetMsg() = $GUI_EVENT_CLOSE GUIDelete() EndFunc ;==>Example_Internal Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam) Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView $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 $LVN_KEYDOWN ; A key has been pressed Local $tInfo = DllStructCreate($tagNMLVKEYDOWN, $ilParam) For $i = 0 to _GUICtrlListView_GetItemCount ($hListView) If _GUICtrlListView_GetItemSelected ($ListView, $i) = True Then $Item = _GUICtrlListView_GetItemTextArray ($ListView, _GUICtrlListView_GetHotItem ($ListView)) ExitLoop EndIf Next EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_NOTIFY | смысл весь в том что скрипт возвращает предыдущую выбранную строку, а не текущую и никак не могу сообразить как получить именно текущуюю. если клацать мышкой по полям - то все ОК (обчитываемтся код $NM_CLICK приводить его не стал так как он корректно отрабатывается) а вот при перемещении по LVI на клавиатуре.... глюкс, например если стоит курсор на 0 итеме и нажмем клавишу стрелку вниз, то в результате в $Item получаем строку с нулевым индексом, все бы ничего по идее можно смотреть какая клавиша нажата и к индексу +1 или -1, НО ситуация еще и в том что допустим стоим на последнем итеме нажимаем клавишу вниз... и получаем последний итем, нажимаем вверх... получаем опять последний, еще раз вверх - предпоследний... все это конечно можно описать, но может есть решение проще? |