Что нового

вызов функции по дабл клику из _GUICtrlListView

running-frag

why me?
Сообщения
441
Репутация
60
Код:
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>


Local $hGui = 	GUICreate ("Form1", 200, 350)

Local $hListView = 	_GUICtrlListView_Create ($hGui, "", 5, 5, 500, 340)
					_GUICtrlListView_InsertColumn ($hListView, 0, "Log")
					_GUICtrlListView_SetColumnWidth ($hListView, 0, 260)
					
					_GUICtrlListView_BeginUpdate 	($hListView)
	For $i = 1 To 10
					_GUICtrlListView_InsertItem ($hListView, "Item no."&$i)
	Next
					_GUICtrlListView_EndUpdate ($hListView)

				GUISetState (@SW_SHOW, $hGui)
				GUIRegisterMsg ($WM_COMMAND, "WM_COMMAND")

While True
    If GUIGetMsg () = $GUI_EVENT_CLOSE Then Exit		
WEnd

Func WM_COMMAND ($hWnd, $iMsg, $wParam, $lParam)
	Local $hInput	=  	BitAND   ($wParam, 0xFFFF)  	; ID input\edit (handle)
    Local $hCode 	=   BitShift ($wParam, 16)      	; string (value)
   
	Select
		Case $hWnd = $hGui							; нужный хэндл окна
			Select
				Case $hCode = $NM_RDBLCLK 				; действие
					ConsoleWrite ("double click done!"&@CR)
                    ConsoleWrite("Item "& _GUICtrlListView_GetItemText ($hListView, _GUICtrlListView_GetSelectedIndices ($hListView)) &@CRLF)
			EndSelect
		EndSelect
		
	Return $GUI_RUNDEFMSG
EndFunc


попытался скрестить ListView со старым кодом WM_COMMAND для срабатывания на даблк клике, хочется что бы по даблклику срабатывала функция

подскажите где косяк

upd: подправлен код вывода (незначительная ошибка)
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
running-frag
Наверное, Func WM_COMMAND() лагает,
мне так кажется, либо, параметры, что этой функции
передаются
 
Автор
R

running-frag

why me?
Сообщения
441
Репутация
60
AZJIO меня направляет на комманду "WM_NOTIFY" и в принцепи код должен быть такой

Код:
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"))
    $iCode = DllStructGetData($tNMHDR, "Code")

    Switch $hWndFrom
        Case $hWndListView
            Switch $iCode
                Case $NM_DBLCLK
						ConsoleWrite ("double click done!"&@CR)
						ConsoleWrite("Item "& _GUICtrlListView_GetItemText ($hListView, _GUICtrlListView_GetSelectedIndices ($hListView)) &@CRLF)
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc


но тогда в чём практическая разница в WM_NOTIFY и WM_COMMAND потому что немного раздражает на каждое действие писать по 100500 доп. функций

разжуйте пожалуста кто знает
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Я - в смысле того, что функция должна быть вызвана,
иначе ........
Твоя (WM_NOTIFY) или (WM_COMMAND) или (X+Y)- не вызываются, - это я просматривал код. Может чего и неудосмотрел
 
Автор
R

running-frag

why me?
Сообщения
441
Репутация
60
Yuriy [?]
Я - в смысле того, что функция должна быть вызвана
Как поиздевался.... Само собой всё вызывается...

Вопрос полностью решён ещё раз спасибо AZJIO. Я правда не понял почему мы в личке общались а не в топике, но главное что тема исчерпана, ещё раз спс.
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Нет. Это я - не в теме. Это нечто - не то. Посмотрел с помощьюь
InqSoft Window Scanner, прочел справку, - точно, - я не в теме.
Зато теперь знаю чуть больше, чем раньше:smile:
 
Автор
R

running-frag

why me?
Сообщения
441
Репутация
60
CreatoR [?]
Это разные сообщения посылаемые окну.
В чём заключается разница? (практическая)

upd: Это не спам и не тролинг, я просто хочу разобраться и узнать чего то новое и как оно работает. Тупо писать функции непонимая как они работают не фонтан.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
MSDN:

WM_COMMAND Notification
The WM_COMMAND message is sent when the user selects a command item from a menu, when a control sends a notification message to its parent window, or when an accelerator keystroke is translated.
Посылается при нажатии пункта меню, когда элемент управления отправляет уведомление родительскому окну, или когда задействованы ускорители (г.клавиши, т.н акселераторы).

WM_NOTIFY Message
Sent by a common control to its parent window when an event has occurred or the control requires some information.
...
Some notifications, chiefly those that have been in the API for a long time, are sent as WM_COMMAND messages.
Посылается общим элементом управления родительскому окну когда происходит событие, или когда элементу требуется получить некую информацию.
Некоторые уведомления, в первую очередь те, которые были в API в течение длительного времени, передаются в виде сообщений WM_COMMAND.
 
Автор
R

running-frag

why me?
Сообщения
441
Репутация
60
Чем дальше в лес тем толще партизаны... :stars:

Ну это да, с этим всё вроде ясно. Но тут рождается другой вопрос. А как узнать (или где) какую использывать на то или иное действие?

По принцепу я так понял они одинаковы (ну исключаем реализацию и кол. оперируемых данный).
 
Верх