DN_INPUT
- John Doe
- Бюрократ
- Posts: 13801
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 72 times
- Been thanked: 425 times
- Contact:
DN_INPUT
Об DN_INPUT сказано: Для включения/выключения посылки этого события воспользуйтесь сообщением DM_SETMOUSEEVENTNOTIFY.
В статье о DM_SETMOUSEEVENTNOTIFY подробностей мало.
По идее это должно работать как подписка, отдельно для каждого экземпляра диалога.
Однако по факту это работает как подписка для каждого "типа" диалога, т.е. послав однократно это сообщение (например) в диалоге создания папки я начинаю получать DN_INPUT в нём всегда.
Подозреваю что всё дело в том, что хэндл диалога представляет собой его адрес в памяти, и адреса зачастую совпадают.
Предлагаю или усовершенствовать реализацию, или задокументировать обязательность отписки от этого события.
В статье о DM_SETMOUSEEVENTNOTIFY подробностей мало.
По идее это должно работать как подписка, отдельно для каждого экземпляра диалога.
Однако по факту это работает как подписка для каждого "типа" диалога, т.е. послав однократно это сообщение (например) в диалоге создания папки я начинаю получать DN_INPUT в нём всегда.
Подозреваю что всё дело в том, что хэндл диалога представляет собой его адрес в памяти, и адреса зачастую совпадают.
Предлагаю или усовершенствовать реализацию, или задокументировать обязательность отписки от этого события.
- John Doe
- Бюрократ
- Posts: 13801
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 72 times
- Been thanked: 425 times
- Contact:
DN_INPUT
Да, перемудрил похоже.
DM_SETMOUSEEVENTNOTIFY вообще не при чём, оказывается для всех меню DN_INPUT приходит без всякой подписки:
P.S.
Или так:
DM_SETMOUSEEVENTNOTIFY вообще не при чём, оказывается для всех меню DN_INPUT приходит без всякой подписки:
Code: Select all
local F = far.Flags
Event {
group="DialogEvent";
action=function(Event,param)
if Event==F.DE_DLGPROCINIT and param.Msg==F.DN_INPUT then mf.beep() end
end;
}
Или так:
Code: Select all
local F = far.Flags
Event {
group="DialogEvent";
action=function(Event,param)
if Event==F.DE_DLGPROCINIT and param.Msg==F.DN_INITDIALOG and param.hDlg:send(F.DM_SETMOUSEEVENTNOTIFY,-1)==1 then mf.beep() end
end;
}
- John Doe
- Бюрократ
- Posts: 13801
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 72 times
- Been thanked: 425 times
- Contact:
DN_INPUT
Насколько я понимаю сейчас вот это утверждение из документации не вполне соответствует действительности:
Хотя пожалуй тут более существенно другое: подписаться может какой-то один плагин, а события-то в результате получат все плагины.
Update:1. По умолчанию событие DN_INPUT не приходит в диалоговую процедуру.
Хотя пожалуй тут более существенно другое: подписаться может какой-то один плагин, а события-то в результате получат все плагины.
- John Doe
- Бюрократ
- Posts: 13801
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 72 times
- Been thanked: 425 times
- Contact:
DN_INPUT
Поясните пожалуйста что тогда значит "по умолчанию".
Кстати ещё один момент: в DN_INPUT кроме мыши также приходят фокусные события.
Причём приходят без всякой подписки.
Заметил что picture.lua использует DM_SETMOUSEEVENTNOTIFY ради получения фокусных событий, получается что это излишне.
- zg
- zero-gravity
- Posts: 6015
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
DN_INPUT
в момент создания диалога состояние прихода мышиных событий — не приходят.John Doe wrote:Поясните пожалуйста что тогда значит "по умолчанию".
получается так.John Doe wrote:Заметил что picture.lua использует DM_SETMOUSEEVENTNOTIFY ради получения фокусных событий, получается что это излишне.
- zg
- zero-gravity
- Posts: 6015
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
DN_INPUT
потому что после создания при помощи сообщения DM_SETMOUSEEVENTNOTIFY оно включается. место в коде я указал.John Doe wrote:но при открытии меню в обработчике проверяю в момент прихода первого же события
- John Doe
- Бюрократ
- Posts: 13801
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 72 times
- Been thanked: 425 times
- Contact:
DN_INPUT
Энциклопедия описывает исключительно АПИ плагинов, а внутренности фара к делу явно не относятся.
В моём понимании "по умолчанию" в данном контексте может означать толь одно: "если плагинописатель не предпринял действий, изменяющий это умолчание".
В моём понимании "по умолчанию" в данном контексте может означать толь одно: "если плагинописатель не предпринял действий, изменяющий это умолчание".
- zg
- zero-gravity
- Posts: 6015
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
DN_INPUT
в том числе внутренности реализации меню. раз хотите формально — пожалуйста. DN_INPUT относится к диалогам. меню — не диалог. внутренности меню — это внутренности фара, которые как вы сами сказали к апи плагинов не относятся. тема с моей стороны закрыта.John Doe wrote:Энциклопедия описывает исключительно АПИ плагинов, а внутренности фара к делу явно не относятся.
- John Doe
- Бюрократ
- Posts: 13801
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 72 times
- Been thanked: 425 times
- Contact:
DN_INPUT
Не понял при чём тут "формально".
Давно уже диалог, и вам это прекрасно известно.
То что в Энциклопедии об этом не сказано — это упущение.
P.S.
Вот тут ряд вопросов.
- допустим фару это зачем-то надо, но зачем посылать плагинам?
- если фар рассчитывает на эти сообщения, то что же будет если плагин её отменит?
Плагин действительно может отменить, и я сходу не заметил изменений в функционировании меню.