Текущий архив: 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.46 MB
Время: 0.01 c