Форма умеет одинаково обрабатывать нажитие клавиш?
Модератор: Модераторы
Форма умеет одинаково обрабатывать нажитие клавиш?
На форме имеется много компонентов, которые могут получать фокус.
Сейчас мне приходится для каждого компонента делать свой обработчик события OnKeyDown.
Можно ли сделать, чтобы нажатие, например <Ctrl>+<F5>, одинаково обрабатывалось всеми компонентами, независимо от того, какой из них сейчас активен, и при этом не создавать для каждого компонента обработку OnKeyDown?
Сейчас мне приходится для каждого компонента делать свой обработчик события OnKeyDown.
Можно ли сделать, чтобы нажатие, например <Ctrl>+<F5>, одинаково обрабатывалось всеми компонентами, независимо от того, какой из них сейчас активен, и при этом не создавать для каждого компонента обработку OnKeyDown?
2 Attid:
Мне всё равно при помощи чего, я не знаю как…
2 alexs:
Это не Lazarus, а у MSE такого нет.
Мне всё равно при помощи чего, я не знаю как…
2 alexs:
Это не Lazarus, а у MSE такого нет.
- debi12345
- долгожитель
- Сообщения: 5761
- Зарегистрирован: 10.05.2006 23:41:15
- Откуда: Ташкент (Узбекистан)
Ну Вы прям какой-то BROADCAST событий захотели 
Шоткаты обрабатываются сперва "детскими" виджетами, потом, если не обработаны ( нет обработчика, сброшен признак "обработано" и т.п. ) - "родительскими", и так до уровня основной формы приложения. Ловите на верхнем уровне и вызывайте нужный код для нужных виджетов. Нужные можно пометить TAG-ом, чтобы потом опознать их при сканировании списка WIDGETS.
Добавлено спустя 3 минуты 15 секунд:
Если код обработчика одинаковый - посто назначайте один обработчик всем виджетам. SENDER будет описывать конкретный виджет - можно даже ветвление в этом обработчике организовать по "if (sender as twidget).name = "superpuperwidget1" then ..".
Добавлено спустя 58 минут 27 секунд:
От Мартина:
Шоткаты обрабатываются сперва "детскими" виджетами, потом, если не обработаны ( нет обработчика, сброшен признак "обработано" и т.п. ) - "родительскими", и так до уровня основной формы приложения. Ловите на верхнем уровне и вызывайте нужный код для нужных виджетов. Нужные можно пометить 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?
Спасибо, приделал tAction.
А теперь в порядке уяснения материала:
1. За что отвечает ao_globalshortcut у tAction?
2. Чем эти опции у tAction отличаются от таких-же опций формы? (взавимозависимы они или нет?)
А теперь в порядке уяснения материала:
1. За что отвечает ao_globalshortcut у tAction?
2. Чем эти опции у tAction отличаются от таких-же опций формы? (взавимозависимы они или нет?)
- Attid
- долгожитель
- Сообщения: 2589
- Зарегистрирован: 27.10.2006 17:29:15
- Откуда: 44°32′23.63″N 41°2′25.2″E
- Контактная информация:
ЭЭЭ писал(а):1. За что отвечает ao_globalshortcut у tAction?
если у тебя несколько форм, то акшен с ao_globalshortcut будет срабатывать на какой бы ты форме его не нажал, а локалшоткат срабатывает только в пределах формы.
А по второму вопросу?
