DN_INPUT

Место, где разработчики плагинов могут поделиться своим опытом.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

DN_INPUT

Post by John Doe »

Об DN_INPUT сказано: Для включения/выключения посылки этого события воспользуйтесь сообщением DM_SETMOUSEEVENTNOTIFY.

В статье о DM_SETMOUSEEVENTNOTIFY подробностей мало.
По идее это должно работать как подписка, отдельно для каждого экземпляра диалога.

Однако по факту это работает как подписка для каждого "типа" диалога, т.е. послав однократно это сообщение (например) в диалоге создания папки я начинаю получать DN_INPUT в нём всегда.
Подозреваю что всё дело в том, что хэндл диалога представляет собой его адрес в памяти, и адреса зачастую совпадают.
Предлагаю или усовершенствовать реализацию, или задокументировать обязательность отписки от этого события.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

DN_INPUT

Post by zg »

хотелось бы увидеть код, демонстрирующий, что вы тут описали.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

DN_INPUT

Post by John Doe »

Да, перемудрил похоже.

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;
}
P.S.
Или так:

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;
}
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

DN_INPUT

Post by zg »

John Doe wrote:т.е. послав однократно это сообщение (например) в диалоге создания папки я начинаю получать DN_INPUT в нём всегда.
John Doe wrote:оказывается для всех меню DN_INPUT приходит без всякой подписки:
диалог создания папки — это не меню, внезапно.

насчёт меню, так задумано, да.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

DN_INPUT

Post by John Doe »

zg wrote: диалог создания папки — это не меню, внезапно.
Каюсь, поторопился (
zg wrote: насчёт меню, так задумано, да.
Действительно задумано, или просто неудачная особенность реализации?
В любом случае стоит документировать.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

DN_INPUT

Post by zg »

John Doe wrote:В любом случае стоит документировать.
что именно?
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

DN_INPUT

Post by John Doe »

Насколько я понимаю сейчас вот это утверждение из документации не вполне соответствует действительности:
1. По умолчанию событие DN_INPUT не приходит в диалоговую процедуру.
Update:
Хотя пожалуй тут более существенно другое: подписаться может какой-то один плагин, а события-то в результате получат все плагины.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

DN_INPUT

Post by zg »

John Doe wrote:Насколько я понимаю сейчас вот это утверждение из документации не вполне соответствует действительности
соответствует.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

DN_INPUT

Post by John Doe »

zg wrote: соответствует.
Поясните пожалуйста что тогда значит "по умолчанию".

Кстати ещё один момент: в DN_INPUT кроме мыши также приходят фокусные события.
Причём приходят без всякой подписки.

Заметил что picture.lua использует DM_SETMOUSEEVENTNOTIFY ради получения фокусных событий, получается что это излишне.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

DN_INPUT

Post by zg »

John Doe wrote:Поясните пожалуйста что тогда значит "по умолчанию".
в момент создания диалога состояние прихода мышиных событий — не приходят.
John Doe wrote:Заметил что picture.lua использует DM_SETMOUSEEVENTNOTIFY ради получения фокусных событий, получается что это излишне.
получается так.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

DN_INPUT

Post by John Doe »

zg wrote: в момент создания диалога состояние прихода мышиных событий — не приходят.
Не знаю что значит "в момент создания", но при открытии меню в обработчике проверяю в момент прихода первого же события, и param.hDlg:send(F.DM_SETMOUSEEVENTNOTIFY,-1)==1
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

DN_INPUT

Post by zg »

John Doe wrote:но при открытии меню в обработчике проверяю в момент прихода первого же события
потому что после создания при помощи сообщения DM_SETMOUSEEVENTNOTIFY оно включается. место в коде я указал.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

DN_INPUT

Post by John Doe »

Энциклопедия описывает исключительно АПИ плагинов, а внутренности фара к делу явно не относятся.

В моём понимании "по умолчанию" в данном контексте может означать толь одно: "если плагинописатель не предпринял действий, изменяющий это умолчание".
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

DN_INPUT

Post by zg »

John Doe wrote:Энциклопедия описывает исключительно АПИ плагинов, а внутренности фара к делу явно не относятся.
в том числе внутренности реализации меню. раз хотите формально — пожалуйста. DN_INPUT относится к диалогам. меню — не диалог. внутренности меню — это внутренности фара, которые как вы сами сказали к апи плагинов не относятся. тема с моей стороны закрыта.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

DN_INPUT

Post by John Doe »

zg wrote: раз хотите формально — пожалуйста
Не понял при чём тут "формально".
zg wrote: меню — не диалог.
Давно уже диалог, и вам это прекрасно известно.
То что в Энциклопедии об этом не сказано — это упущение.

P.S.
zg wrote: насчёт меню, так задумано, да.
Вот тут ряд вопросов.
- допустим фару это зачем-то надо, но зачем посылать плагинам?
- если фар рассчитывает на эти сообщения, то что же будет если плагин её отменит?

Плагин действительно может отменить, и я сходу не заметил изменений в функционировании меню.
Post Reply

Return to “Разработка плагинов”