Главная страница
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
3-15432
Эдуард
2003-01-22 10:56
2003.02.06
Роль приложения в MS SQL и ADO


3-15461
mate
2003-01-20 13:35
2003.02.06
Int в MSSQL


7-15972
stecoff
2002-11-14 15:42
2003.02.06
Pабота с arj


3-15455
ZiLot
2003-01-19 12:19
2003.02.06
Как добаить запись в КОНЕЦ таблицы?


14-15850
ivansv
2003-01-19 03:42
2003.02.06
Как вывести на экране текст в KOI8-R