Страница 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 09:45:38
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
ну если никто не ответил значит никто не знает, а изучать код только для ответа лень =) поэтому можешь сделать сам =)