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

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

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

Post by NightRoman » Thu 04 Mar, 2010 11:19

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

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

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

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

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

Re: ProcessKey() и KEY_xxxx

Post by Skirda » Thu 04 Mar, 2010 12:01

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: 5872
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 9 times
Contact:

Re: ProcessKey() и KEY_xxxx

Post by NightRoman » Thu 04 Mar, 2010 12:21

Skirda
Ага, спасибо, уже полезно и интересно. Но тогда попутный вопрос - они как-то связаны с FE_GOTFOCUS и FE_KILLFOCUS?

User avatar
NightRoman
Posts: 5872
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 9 times
Contact:

Re: ProcessKey() и KEY_xxxx

Post by NightRoman » Thu 04 Mar, 2010 12:23

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

User avatar
NightRoman
Posts: 5872
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 9 times
Contact:

Re: ProcessKey() и KEY_xxxx

Post by NightRoman » Thu 04 Mar, 2010 12:39

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

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

Re: ProcessKey() и KEY_xxxx

Post by Skirda » Thu 04 Mar, 2010 12:58

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: 5872
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 9 times
Contact:

Re: ProcessKey() и KEY_xxxx

Post by NightRoman » Thu 04 Mar, 2010 13:01

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

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

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

Re: ProcessKey() и KEY_xxxx

Post by Skirda » Thu 04 Mar, 2010 13:57

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: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

Re: ProcessKey() и KEY_xxxx

Post by Skirda » Thu 04 Mar, 2010 13:58

NightRoman wrote:Это могло бы быть полезно отдельным событием. Но оно недокументировано. Придется воздержаться.
ОНО уже давно не меняется. Задокументируем обязательно.
We are the Borg. You will be assimilated.
So Say We All!

User avatar
NightRoman
Posts: 5872
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 9 times
Contact:

Re: ProcessKey() и KEY_xxxx

Post by NightRoman » Thu 04 Mar, 2010 14:02

как то не задавались вопросом - работает и гуд.
С этим я полностью согласен. Но в писании-то про это нет. Всякий, кто с этими мистическими клавишами будет сталкиваться, будет задаваться вопросами: сначала а не у него ли это глючит, а потом а не в Фаре ли это глючит.

User avatar
NightRoman
Posts: 5872
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 9 times
Contact:

Re: ProcessKey() и KEY_xxxx

Post by NightRoman » Thu 04 Mar, 2010 14:04

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

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

Re: ProcessKey() и KEY_xxxx

Post by Skirda » Thu 04 Mar, 2010 14:10

NightRoman wrote:
Skirda wrote:
NightRoman wrote:Это могло бы быть полезно отдельным событием. Но оно недокументировано. Придется воздержаться.
ОНО уже давно не меняется. Задокументируем обязательно.
О, это хорошо.
нарисуй напоминалку на мантис, в раздел "Энциклопопия"
We are the Borg. You will be assimilated.
So Say We All!

User avatar
NightRoman
Posts: 5872
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 9 times
Contact:

Re: ProcessKey() и KEY_xxxx

Post by NightRoman » Thu 04 Mar, 2010 14:13

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

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

User avatar
NightRoman
Posts: 5872
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 9 times
Contact:

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

Post by NightRoman » Wed 11 Jan, 2012 16:21

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

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

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

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

Post by Skirda » Wed 11 Jan, 2012 17:02

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

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

User avatar
zg
zero-gravity
Posts: 5312
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 48 times
Contact:

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

Post by zg » Wed 11 Jan, 2012 17:14

Skirda wrote:...ладно. На чем доступном можно проверить? (комбайны с .Net не предлагать ;-))
в любом плагине с ProcessPanelInputW ставишь лог в начале. 1 — подозреваю KEY_IDLE :)

Post Reply

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