Страница 1 из 1

Форма умеет одинаково обрабатывать нажитие клавиш?

СообщениеДобавлено: 09.06.2008 13:48:50
t-ea
На форме имеется много компонентов, которые могут получать фокус.
Сейчас мне приходится для каждого компонента делать свой обработчик события OnKeyDown.
Можно ли сделать, чтобы нажатие, например <Ctrl>+<F5>, одинаково обрабатывалось всеми компонентами, независимо от того, какой из них сейчас активен, и при этом не создавать для каждого компонента обработку OnKeyDown?

Re: Форма умеет одинаково обрабатывать нажитие клавиш?

СообщениеДобавлено: 09.06.2008 14:05:44
Attid
экшен не пойдет ?

Re: Форма умеет одинаково обрабатывать нажитие клавиш?

СообщениеДобавлено: 09.06.2008 19:57:59
alexs
У формы установи KeyPreview=true
и обработай событие onKeyDown у самой формы

Re: Форма умеет одинаково обрабатывать нажитие клавиш?

СообщениеДобавлено: 09.06.2008 23:23:37
t-ea
2 Attid:
Мне всё равно при помощи чего, я не знаю как…

2 alexs:
Это не Lazarus, а у MSE такого нет.

Re: Форма умеет одинаково обрабатывать нажитие клавиш?

СообщениеДобавлено: 10.06.2008 08:43:56
debi12345
Ну Вы прям какой-то BROADCAST событий захотели :)
Шоткаты обрабатываются сперва "детскими" виджетами, потом, если не обработаны ( нет обработчика, сброшен признак "обработано" и т.п. ) - "родительскими", и так до уровня основной формы приложения. Ловите на верхнем уровне и вызывайте нужный код для нужных виджетов. Нужные можно пометить TAG-ом, чтобы потом опознать их при сканировании списка WIDGETS.

Добавлено спустя 3 минуты 15 секунд:
независимо от того, какой из них сейчас активен, и при этом не создавать для каждого компонента обработку OnKeyDown?

Если код обработчика одинаковый - посто назначайте один обработчик всем виджетам. SENDER будет описывать конкретный виджет - можно даже ветвление в этом обработчике организовать по "if (sender as twidget).name = "superpuperwidget1" then ..".

Добавлено спустя 58 минут 27 секунд:
От Мартина:

Hi EEE,
All widgets feed the key events they can't handle to their parentwidget. The
onkeydown handler of the form gets all unhandled keyevents from all widgets
in the form. es_child is set in info.eventstate if the event derives from a
child.
If you want to react on Ctrl+F5, place a taction from tab Gui into the form,
set the shortcut property to "Ctrl+F5" and enable ao_localshortcut in
options. Write your code into taction.onexecute.

Martin

PS: Can a Russian speaking person feed foreward the message please?

Re: Форма умеет одинаково обрабатывать нажитие клавиш?

СообщениеДобавлено: 10.06.2008 13:41:11
t-ea
Спасибо, приделал tAction.

А теперь в порядке уяснения материала:

1. За что отвечает ao_globalshortcut у tAction?
2. Чем эти опции у tAction отличаются от таких-же опций формы? (взавимозависимы они или нет?)

Re: Форма умеет одинаково обрабатывать нажитие клавиш?

СообщениеДобавлено: 10.06.2008 15:51:45
Attid
ЭЭЭ писал(а):1. За что отвечает ao_globalshortcut у tAction?

если у тебя несколько форм, то акшен с ao_globalshortcut будет срабатывать на какой бы ты форме его не нажал, а локалшоткат срабатывает только в пределах формы.

Re: Форма умеет одинаково обрабатывать нажитие клавиш?

СообщениеДобавлено: 10.06.2008 17:57:03
t-ea
А по второму вопросу?

Re: Форма умеет одинаково обрабатывать нажитие клавиш?

СообщениеДобавлено: 11.06.2008 09:25:09
Attid
ну если никто не ответил значит никто не знает, а изучать код только для ответа лень =) поэтому можешь сделать сам =)