Главная страница
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.011 c
14-15821
RomaIzDurdoma
2003-01-18 00:39
2003.02.06
Апгрейд ПО


1-15654
Lord of Light - Elf
2003-01-27 11:07
2003.02.06
Имя компьютера.


1-15667
don-do
2003-01-27 08:10
2003.02.06
Form.Print


1-15753
Jaxtor
2003-01-28 12:25
2003.02.06
Значение 0x7FFF


1-15670
Ich Hasse
2003-01-29 17:06
2003.02.06
Excel, последняя запись