![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Горячие клавиши
faiwer © (2010-09-14 16:15:00)Удалено модератором
Примечание: Два вопроса - две ветки
faiwer (2010-09-20 14:25:00) [1]Надо чтобы хоткей визуально отображался, но при этом не функционировал :)
Ega23 (2010-09-20 14:21:00) [2]
> Ну это и ежу понятно, а ты сам вопрос то читал? (первый
> пост)
А ты возьми и сам его прочитай. Я, например, нишиша не понял, чего тебе надо.
faiwer (2010-09-20 14:01:00) [3]
> Естественно. Action-то остался. У тебя по хоткею не MenuItemClick
> происходит, а Action.Execute
Ну это и ежу понятно, а ты сам вопрос то читал? (первый пост)
Ega23 (2010-09-20 11:06:00) [4]
> убери у этого TMenuItem хоткей, запусти программу и ...
> он на месте.
Естественно. Action-то остался. У тебя по хоткею не MenuItemClick происходит, а Action.Execute
faiwer (2010-09-18 00:14:00) [5]
> Что значит "динамически создаваемая форма"? Они все динамически
> создаются, если чё.
Я имею ввиду мною, я делаю это так:
> form: TForm;
> form:=TFlatF.EditRecord(sell,ID[num]);
>
> constructor EditRecord(aSell: boolean; aNum: integer);
>
> constructor TFlatF.EditRecord(aSell: boolean; aNum: integer);
>
> begin
> inherited Create(Application);
> ...
> Show;
> end;
При этом в ней (новосозданной и отображённой форме срабатывают шоткеи главной формы! о_О
> Бред какой-то пишешь.
Помести на форму TMainMenu, создай там 1 пункт меню. Создай 1 TAction, присвой ему хоткей, назначь етому пункту меню этот экшн, убери у этого TMenuItem хоткей, запусти программу и ... он на месте.
Ega23 (2010-09-17 22:11:00) [6]
> 1. в динамически создаваемых формах работают ShortCut-ы
> формы родителя (бред да?)
Что значит "динамически создаваемая форма"? Они все динамически создаются, если чё.
> Причём если насильно стереть его в свойствах TMenuItem,
> оно восстанавливается при компиляции (или загрузке формы).
Бред какой-то пишешь.
faiwer (2010-09-17 21:20:00) [7]Причём это из-за наличия ShortCut в пунктах главного меню, которое задаётся из-за привязки к TAction. Причём если насильно стереть его в свойствах TMenuItem, оно восстанавливается при компиляции (или загрузке формы ). Разве что править их уже в ран-тайме, может поможет, не проверял
faiwer (2010-09-17 21:17:00) [8]Ega23, я так и сделал, и получил:
1. в динамически создаваемых формах работают ShortCut-ы формы родителя (бред да?)
2. ShortCut-ы вроде vk_delete блокируют адекватную работу контролов вроде TEdit
Ega23 (2010-09-17 21:06:00) [9]
> . Как вы поступите?
Заведу TActionList, в нём заведу TAction, напишу ему Caption, ShortCut, ImageIndex и т.д.
Задам ему обработчики OnExecute, OnHint, OnUpdate
После чего назначу этот Action и нужному MenuItem в PopupMenu, в MainMenu, кнопке на ToolBar и вообще, куда захочу, туда и назначу.
Для этого они и придуманы.
faiwer (2010-09-17 19:53:00) [10]Решил проблему убрав ShortCut из Action-ов, и насильно вбил их в PopurMenu. После того как в TMainMenu пропали ShortCut-ы глюк с их обработкой при открытых других окнах пропал. Но всё же хотелось бы услышать не индусский вариант ) К примеру у вас есть бинд vk_Delete на удаление выделенного объекта и вы хотите продублировать эти функции в KeyUp, в контекстное меню и главное меню. Как вы поступите? Если вы зададите в TMainMenu пункту ShortCut, то он не даст вам в обычных Edit-ах и прочих элементах стирать текста (если насильно не ловить сообщения и не передавать в активные контролы). Либо же отказываться от заманчивой надписи "Удалить Del" в пункте меню
faiwer (2010-09-17 18:35:00) [11]И как мне его применить?
msg.CharCode -> номер нажатой клавиши
Handled -> передать ли код дальше
Итог. Если handled трогать, то надо каким то образом активной форме (стараюсь избегать таких костылей) отправлять сообщение о нажатии клавиши, в противном случае нажатие клавиши уходит в молоко. Если же не трогать, то срабатывает ShortCut =(
И что насчёт второго вопроса?)
Игорь Шевченко (2010-09-14 19:40:00) [12]RTFM: TCustomForm.OnShortCut