Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.07.2010, 12:39   #1
AnTe
Форумчанин
 
Регистрация: 25.09.2008
Сообщений: 209
По умолчанию Перехват клавиш

Здравствуйте. Возникла следующая проблема.

Есть форма. На неё кладу TactionManager. Создаю новый TAction, и назначаю ему клавишу быстрого запуска ShortCut.

При работе с этой формой всё нормально. Вызываю вторую форму, которая обрабатывает кнопки по-своему!. Если её вызвать по ShowModal - всё ОК, а если по Show - то кнопка быстрого запуска Action срабатывает, как вызов этого Action! И никак это событие не перехватить.

Понимаю, что вроде как это так и должно быть. Но что можно сделать?

На ум приходит один вариант - отказаться от ShortCut у Action и вызывать это действие самому, в обработчике OnKeyDown, формы. Однако тогда пропадёт и подсказка, о горячих клавишах, в выпадающем меню (в оригинальной программе у меня это действие и в меню есть).

Тестовый проект прилагаю.
Изображения
Тип файла: png key.png (11.9 Кб, 75 просмотров)
Вложения
Тип файла: rar KeyPreview.rar (2.4 Кб, 11 просмотров)
AnTe вне форума Ответить с цитированием
Старый 22.07.2010, 13:34   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Если мне не изменяет чутье ActionManager1.State:=asSuspended; отключает реакцию на Action'ы
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.07.2010, 21:26   #3
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Как вариант можно прописать в родительской форме, в обработчике для action, case и в нем уже прописать нужные действия (вплоть до вызова нужной функции на дочерней форме). Способ идиотский, но он работает...
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Старый 23.07.2010, 06:24   #4
AnTe
Форумчанин
 
Регистрация: 25.09.2008
Сообщений: 209
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Если мне не изменяет чутье ActionManager1.State:=asSuspended; отключает реакцию на Action'ы
Спасибо!

Прописал эту строку на OnActivate дочерней, а в OnActivate главной возвращаю обратно, ActionManager1.State:=asNormal

извращение, конечно, но работает!

Цитата:
Сообщение от Impuls1989 Посмотреть сообщение
Как вариант можно прописать в родительской форме, в обработчике для action, case и в нем уже прописать нужные действия (вплоть до вызова нужной функции на дочерней форме). Способ идиотский, но он работает...
нееее.. это ж с ума сойти, для каждого. У меня этих Action-ов вагон и маленькая тележка

UPD
Нашёл ещё вариант - на вторую форму тоже положить ActionManager, обработчик клавиш формы не трогать, а все нужные действия прописывать в нём, определяя соответствующие действия и раздавая им ShortCut

Последний раз редактировалось AnTe; 23.07.2010 в 06:35.
AnTe вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перехват нажатых клавиш sxem Общие вопросы Delphi 7 02.05.2010 23:31
перехват нажатия клавиш skalt12 Общие вопросы Delphi 4 17.08.2009 13:06
Перехват нажатия клавиш. Vi_russ Общие вопросы Delphi 1 02.12.2008 20:25
Перехват нажатых клавиш AidarBik Общие вопросы Delphi 2 21.06.2007 20:11