KEY_NONE, KEY_IDLE, KEY_GOTFOCUS, KEY_KILLFOCUS (ProcessPanelInputW - что такое wVirtualKeyCode 1, 6, 7)

Место, где разработчики плагинов могут поделиться своим опытом.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

KEY_NONE, KEY_IDLE, KEY_GOTFOCUS, KEY_KILLFOCUS (ProcessPanelInputW - что такое wVirtualKeyCode 1, 6, 7)

Post by NightRoman »

Не буду заводить новую тему, вопрос у меня вроде связанный с этой. Если тянет на отдельную, просьба модераторам перенести.

Что за загадочные клавиши постоянно приходят в панель наподобие idle:
Key = 0x00030001, 0x00030006, 0x00030007
ControlState = 0

0x00030000 вроде как соответствует Ctrl+Alt, но чего они вообще делают в Key, если ControlState для этого предназначен в ProcessKey? Почему они постояно приходят? Типа idle? Так вроде есть у панелей специальное событие для этого...

Почему интересует. В Фарнет думаю отфильтровать их и не посылать дальше в модули, чтобы модули уже не парились с этими кнопками при отладке или логгировании событий, а их писатели не мучались и не мучали вопросами :). Только непонятно: чего я модули лишу при этом, о чем я не знаю?
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: ProcessKey() и KEY_xxxx

Post by Skirda »

Code: Select all

#define INTERNAL_KEY_BASE_2   0x00030000
...
	KEY_NONE                 =INTERNAL_KEY_BASE_2+1,
а эти не определены в АПИ (только внутри, хотя, наверное нужно их вытащить наружу)

Code: Select all

	KEY_KILLFOCUS            =INTERNAL_KEY_BASE_2+6,
	KEY_GOTFOCUS             =INTERNAL_KEY_BASE_2+7,
в keys.hpp много интересного найдешь :-)
We are the Borg. You will be assimilated.
So Say We All!
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: ProcessKey() и KEY_xxxx

Post by NightRoman »

Skirda
Ага, спасибо, уже полезно и интересно. Но тогда попутный вопрос - они как-то связаны с FE_GOTFOCUS и FE_KILLFOCUS?
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: ProcessKey() и KEY_xxxx

Post by NightRoman »

А KEY_NONE как то связан с FE_IDLE? Зачем он вообще посылается? Смысл? Если нет смысла, так и напишите в доках - смысла нет, и выдайте себе этим индульгенцию и избавьте от назойливых вопросов :)
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: ProcessKey() и KEY_xxxx

Post by NightRoman »

Хотя и все равно как сделано, лишь бы как-то работало и было задокументировано, но от критики не могу удержаться: зачем посылать то, что не является Key, а является Event, в ProcessKey() вместо того, чтобы посылать в ProcessEvent()? Может, добавить это в список будущей ломки АПИ?
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: ProcessKey() и KEY_xxxx

Post by Skirda »

NightRoman wrote:они как-то связаны с FE_GOTFOCUS и FE_KILLFOCUS?
нет. KEY_GOTFOCUS/KEY_KILLFOCUS - это ответные реакции на FOCUS_EVENT (окно Far`а получает или теряет фокус ввода),
а FE_ - это внутри Far`а - редактор.
We are the Borg. You will be assimilated.
So Say We All!
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: ProcessKey() и KEY_xxxx

Post by NightRoman »

Skirda wrote:
NightRoman wrote:они как-то связаны с FE_GOTFOCUS и FE_KILLFOCUS?
нет. KEY_GOTFOCUS/KEY_KILLFOCUS - это ответные реакции на FOCUS_EVENT (окно Far`а получает или теряет фокус ввода),
а FE_ - это внутри Far`а - редактор.
Хм. Это могло бы быть полезно отдельным событием. Но оно недокументировано. Придется воздержаться.

ЗЫ: FE_ - это все-таки панели. FileEvent типа, а в редакторе вроде EE_, не помню.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: ProcessKey() и KEY_xxxx

Post by Skirda »

NightRoman wrote:А KEY_NONE как то связан с FE_IDLE? Зачем он вообще посылается? Смысл? Если нет смысла, так и напишите в доках - смысла нет, и выдайте себе этим индульгенцию и избавьте от назойливых вопросов :)
Хмм.. я тебе вот что скажу, только ты не обижайся :twisted:
None и Idle были изначально. В чем сермяжная правда - ХЗ, как то не задавались вопросом - работает и гуд. :oops:
We are the Borg. You will be assimilated.
So Say We All!
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: ProcessKey() и KEY_xxxx

Post by Skirda »

NightRoman wrote:Это могло бы быть полезно отдельным событием. Но оно недокументировано. Придется воздержаться.
ОНО уже давно не меняется. Задокументируем обязательно.
We are the Borg. You will be assimilated.
So Say We All!
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: ProcessKey() и KEY_xxxx

Post by NightRoman »

как то не задавались вопросом - работает и гуд.
С этим я полностью согласен. Но в писании-то про это нет. Всякий, кто с этими мистическими клавишами будет сталкиваться, будет задаваться вопросами: сначала а не у него ли это глючит, а потом а не в Фаре ли это глючит.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: ProcessKey() и KEY_xxxx

Post by NightRoman »

Skirda wrote:
NightRoman wrote:Это могло бы быть полезно отдельным событием. Но оно недокументировано. Придется воздержаться.
ОНО уже давно не меняется. Задокументируем обязательно.
О, это хорошо. Надо подумать, какая из этого практическая выгода может быть, сразу не придумывается, но чую, что должна быть точно - редко, но метко.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: ProcessKey() и KEY_xxxx

Post by Skirda »

NightRoman wrote:
Skirda wrote:
NightRoman wrote:Это могло бы быть полезно отдельным событием. Но оно недокументировано. Придется воздержаться.
ОНО уже давно не меняется. Задокументируем обязательно.
О, это хорошо.
нарисуй напоминалку на мантис, в раздел "Энциклопопия"
We are the Borg. You will be assimilated.
So Say We All!
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: ProcessKey() и KEY_xxxx

Post by NightRoman »

Skirda wrote:нарисуй напоминалку на мантис, в раздел "Энциклопопия"
Хорошо:
http://bugs.farmanager.com/view.php?id=1296

Спасибо за объяснения и за полезную инфу. Наведу у себя порядок теперь в этом вопросе, давно собирался.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Фар3: ProcessPanelInputW - что такое wVirtualKeyCode 1, 6, 7

Post by NightRoman »

В ProcessPanelInputW приходят KEY_EVENT нажатия с wVirtualKeyCode 1 (вначале), 6, 7 (непрерывно?). Я их игнорирую пока и ничего при этом не теряю вроде.

1) Но что это за события?
2) Если они вдруг шум/мусор, может, Фар их сам, того, отфильтрует? Меньше будет вопросов типа этого.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: Фар3: ProcessPanelInputW - что такое wVirtualKeyCode 1,

Post by Skirda »

проверь, как работает keyboard.cpp::TranslateKeyToVK() в части блока "else if (FKey && FKey < WCHAR_MAX)"
есть подозрение, что нужно еще одно условие перед этим блоком, с проверкой FKey на предмет...

...ладно. На чем доступном можно проверить? (комбайны с .Net не предлагать ;-))
We are the Borg. You will be assimilated.
So Say We All!
Post Reply

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