Page 1 of 3

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

Posted: Thu 04 Mar, 2010 11:19
by NightRoman
Не буду заводить новую тему, вопрос у меня вроде связанный с этой. Если тянет на отдельную, просьба модераторам перенести.

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

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

Почему интересует. В Фарнет думаю отфильтровать их и не посылать дальше в модули, чтобы модули уже не парились с этими кнопками при отладке или логгировании событий, а их писатели не мучались и не мучали вопросами :). Только непонятно: чего я модули лишу при этом, о чем я не знаю?

Re: ProcessKey() и KEY_xxxx

Posted: Thu 04 Mar, 2010 12:01
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 много интересного найдешь :-)

Re: ProcessKey() и KEY_xxxx

Posted: Thu 04 Mar, 2010 12:21
by NightRoman
Skirda
Ага, спасибо, уже полезно и интересно. Но тогда попутный вопрос - они как-то связаны с FE_GOTFOCUS и FE_KILLFOCUS?

Re: ProcessKey() и KEY_xxxx

Posted: Thu 04 Mar, 2010 12:23
by NightRoman
А KEY_NONE как то связан с FE_IDLE? Зачем он вообще посылается? Смысл? Если нет смысла, так и напишите в доках - смысла нет, и выдайте себе этим индульгенцию и избавьте от назойливых вопросов :)

Re: ProcessKey() и KEY_xxxx

Posted: Thu 04 Mar, 2010 12:39
by NightRoman
Хотя и все равно как сделано, лишь бы как-то работало и было задокументировано, но от критики не могу удержаться: зачем посылать то, что не является Key, а является Event, в ProcessKey() вместо того, чтобы посылать в ProcessEvent()? Может, добавить это в список будущей ломки АПИ?

Re: ProcessKey() и KEY_xxxx

Posted: Thu 04 Mar, 2010 12:58
by Skirda
NightRoman wrote:они как-то связаны с FE_GOTFOCUS и FE_KILLFOCUS?
нет. KEY_GOTFOCUS/KEY_KILLFOCUS - это ответные реакции на FOCUS_EVENT (окно Far`а получает или теряет фокус ввода),
а FE_ - это внутри Far`а - редактор.

Re: ProcessKey() и KEY_xxxx

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

ЗЫ: FE_ - это все-таки панели. FileEvent типа, а в редакторе вроде EE_, не помню.

Re: ProcessKey() и KEY_xxxx

Posted: Thu 04 Mar, 2010 13:57
by Skirda
NightRoman wrote:А KEY_NONE как то связан с FE_IDLE? Зачем он вообще посылается? Смысл? Если нет смысла, так и напишите в доках - смысла нет, и выдайте себе этим индульгенцию и избавьте от назойливых вопросов :)
Хмм.. я тебе вот что скажу, только ты не обижайся :twisted:
None и Idle были изначально. В чем сермяжная правда - ХЗ, как то не задавались вопросом - работает и гуд. :oops:

Re: ProcessKey() и KEY_xxxx

Posted: Thu 04 Mar, 2010 13:58
by Skirda
NightRoman wrote:Это могло бы быть полезно отдельным событием. Но оно недокументировано. Придется воздержаться.
ОНО уже давно не меняется. Задокументируем обязательно.

Re: ProcessKey() и KEY_xxxx

Posted: Thu 04 Mar, 2010 14:02
by NightRoman
как то не задавались вопросом - работает и гуд.
С этим я полностью согласен. Но в писании-то про это нет. Всякий, кто с этими мистическими клавишами будет сталкиваться, будет задаваться вопросами: сначала а не у него ли это глючит, а потом а не в Фаре ли это глючит.

Re: ProcessKey() и KEY_xxxx

Posted: Thu 04 Mar, 2010 14:04
by NightRoman
Skirda wrote:
NightRoman wrote:Это могло бы быть полезно отдельным событием. Но оно недокументировано. Придется воздержаться.
ОНО уже давно не меняется. Задокументируем обязательно.
О, это хорошо. Надо подумать, какая из этого практическая выгода может быть, сразу не придумывается, но чую, что должна быть точно - редко, но метко.

Re: ProcessKey() и KEY_xxxx

Posted: Thu 04 Mar, 2010 14:10
by Skirda
NightRoman wrote:
Skirda wrote:
NightRoman wrote:Это могло бы быть полезно отдельным событием. Но оно недокументировано. Придется воздержаться.
ОНО уже давно не меняется. Задокументируем обязательно.
О, это хорошо.
нарисуй напоминалку на мантис, в раздел "Энциклопопия"

Re: ProcessKey() и KEY_xxxx

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

Спасибо за объяснения и за полезную инфу. Наведу у себя порядок теперь в этом вопросе, давно собирался.

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

Posted: Wed 11 Jan, 2012 16:21
by NightRoman
В ProcessPanelInputW приходят KEY_EVENT нажатия с wVirtualKeyCode 1 (вначале), 6, 7 (непрерывно?). Я их игнорирую пока и ничего при этом не теряю вроде.

1) Но что это за события?
2) Если они вдруг шум/мусор, может, Фар их сам, того, отфильтрует? Меньше будет вопросов типа этого.

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

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

...ладно. На чем доступном можно проверить? (комбайны с .Net не предлагать ;-))