Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как обработать событие TForm.OnShortCut ? [D6, Win95/98, WinME, NT4, Win2k, WinXP]


Nikolai_S ©   (2003-01-24 18:01:00) 

Здравствуйте, мастера...
Мне известно, что можно использовать переменную Msg.CharCode для того, чтобы определить какая клавиша нажата. Но я не могу разобраться как определить сочетание сразу нескольких нажатых клавиш. Например <Ctrl>+<Tab> или <Alt>+<Shift>+<K>. Если можно - напишите конкретный пример.


Nikolai_S   (2003-01-27 19:41:00) [1]

Вот мой пример, он не работает:
if Msg.CharCode = VK_TAB then
if (GetKeyState(VK_CONTROL) < 0) then
begin
Handled := True;
ShowMessage("Нажали Ctrl+Tab");
end;


Nikolai_S   (2003-01-27 19:40:00) [2]

Прошу прощения. В данном виде пример работает как часы. Просто я проверял на сочетании клавиш <Ctrl> + <Tab>.
Видимо клавиша Tab обрабатывается где-то внутри формы и Handled обращается в True. Ведь Tab - служит для перемещения между контролами.
Я же хочу, чтобы сочетание клавиш <Ctrl>+<Tab> переключало страницы на форме. Список страниц в TListView


Чих-пых   (2003-01-27 18:36:00) [3]


> Если я, например, нажал и удерживаю <Ctrl>, то при нажатии
> на другую клавишу событие OnShortCut уже не вызывается.

Как проверяли? У меня всё вызывается.


Чих-пых   (2003-01-27 18:35:00) [4]


> Нет, знаете. Этот метод не работает. Я проверил.

Точно проверял? Думаете, я не проверял, перед публикоавнием? Всё работает. Да, действительно, OnShortCut получает только одну любую клавишу, будь то Ctrl, Shift или А какая-нибудь. Но здесь определяем, нажата ли ещё какая-нибудь клавиша:
GetKeyState(VK_MENU) получает инфу, нажата ли клавиша Alt, GetKeyState(VK_SHIFT) - нажата ли Shift.
Так что всё ок.


Nikolai_S   (2003-01-27 18:04:00) [5]

Нет, знаете. Этот метод не работает. Я проверил. Более того, похоже с помощью события TForm.OnShortCut нельзя отловить сочетание сразу нескольких нажатых клавиш. Если я, например, нажал и удерживаю <Ctrl>, то при нажатии на другую клавишу событие OnShortCut уже не вызывается.

Тогда другой вопрос: как отловить в какой-то конкретной форме (диалоговой, модальной) комбинацию нажатых горячих клавиш?


Nikolai_S   (2003-01-27 10:55:00) [6]

Большое Thanx


Чих-пых   (2003-01-25 05:26:00) [7]


procedure TForm1.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
begin
if Msg.CharCode = Ord("K") then
if (GetKeyState(VK_MENU) < 0)
and (GetKeyState(VK_SHIFT) < 0) then
begin
Handled := True;
ShowMessage("Нажали Alt+Shift+K");
end;
end;


Чих-пых   (2003-01-25 04:35:00) [8]

The Msg parameter represents the Windows keystroke message. The virtual key code is given by the CharCode field, and the KeyData field contains a set of flags that indicate the repeat count, scan code, extended-key flag, context code, previous key-state flag and transition-state flag. See the Windows documentation for details on these fields.


Nikolai_S   (2003-01-24 19:12:00) [9]

Никто не сталкивался?


Наверх

Титульная страница Поиск, карта сайта Написать письмо