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

Вопросы программирования и использования MSEide + MSEgui.

Модератор: Модераторы

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

Сообщение t-ea » 09.06.2008 13:48:50

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

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

Сообщение Attid » 09.06.2008 14:05:44

экшен не пойдет ?
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

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

Сообщение alexs » 09.06.2008 19:57:59

У формы установи KeyPreview=true
и обработай событие onKeyDown у самой формы
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

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

Сообщение t-ea » 09.06.2008 23:23:37

2 Attid:
Мне всё равно при помощи чего, я не знаю как…

2 alexs:
Это не Lazarus, а у MSE такого нет.
t-ea
новенький
 
Сообщения: 98
Зарегистрирован: 22.09.2006 00:22:34

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

Сообщение debi12345 » 10.06.2008 08:43:56

Ну Вы прям какой-то 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?
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

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

Сообщение t-ea » 10.06.2008 13:41:11

Спасибо, приделал tAction.

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

1. За что отвечает ao_globalshortcut у tAction?
2. Чем эти опции у tAction отличаются от таких-же опций формы? (взавимозависимы они или нет?)
t-ea
новенький
 
Сообщения: 98
Зарегистрирован: 22.09.2006 00:22:34

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

Сообщение Attid » 10.06.2008 15:51:45

ЭЭЭ писал(а):1. За что отвечает ao_globalshortcut у tAction?

если у тебя несколько форм, то акшен с ao_globalshortcut будет срабатывать на какой бы ты форме его не нажал, а локалшоткат срабатывает только в пределах формы.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

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

Сообщение t-ea » 10.06.2008 17:57:03

А по второму вопросу?
t-ea
новенький
 
Сообщения: 98
Зарегистрирован: 22.09.2006 00:22:34

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

Сообщение Attid » 11.06.2008 09:25:09

ну если никто не ответил значит никто не знает, а изучать код только для ответа лень =) поэтому можешь сделать сам =)
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E


Вернуться в MSEide + MSEgui

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Рейтинг@Mail.ru