Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.06;
Скачать: CL | DM;

Вниз

Как обработать событие TForm.OnShortCut ?   Найти похожие ветки 

 
Nikolai_S ©   (2003-01-24 18:01) [0]

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


 
Nikolai_S ©   (2003-01-24 19:12) [1]

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


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

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.


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


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;


 
Nikolai_S ©   (2003-01-27 10:55) [4]

Большое Thanx


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

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

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


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


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

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


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


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

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


 
Nikolai_S ©   (2003-01-27 19:40) [8]

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


 
Nikolai_S ©   (2003-01-27 19:41) [9]

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



Страницы: 1 вся ветка

Текущий архив: 2003.02.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
1-15649
malkolinge
2003-01-29 13:46
2003.02.06
Функции обратного вызова и т.ж.


3-15483
Cossys
2003-01-20 15:53
2003.02.06
Хэээлп! Фичи Qreport


3-15442
Stenkz
2003-01-20 09:45
2003.02.06
Перемещение по визуальным компонентам при нажатии клавиши


1-15643
Darkwin
2003-01-28 14:43
2003.02.06
Как вывести сообщение, что программа на нём не останавливалась?


3-15519
Ihor Osov'yak
2003-01-21 00:00
2003.02.06
Аналог интербейсовского генератора в MS SQL 2000