![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отследить нажатие комбинации клавиш?
wWwWw © (2007-07-20 11:54:00)Как отследить нажатие комбинации клавиш, например:
Alt + Shift +D
???
wWwWw (2007-07-20 17:21:00) [1]Похоже дело не в неправильном написании!
Я буковка в буковку переписываю то - что в справке:
if (ssShift in Shift) and (Key = ord('Y')) then
Но при нажатии на эти клавиши не получаю ничего, кроме писка из системного динамика!
Что это? - Конфликт с какой-то процедурой?
Anatoly Podgoretsky (2007-07-20 16:43:00) [2]> wWwWw (20.07.2007 16:33:17) [17]
Читать про множества, а примеры в Дельфи по данной части вполне адекватные.
iXT (2007-07-20 16:41:00) [3]Не верю (С)
wWwWw (2007-07-20 16:33:00) [4]Справку все-таки почитать
так я по справке всё это и пробовал!
iXT (2007-07-20 16:14:00) [5]> КАК ЖЕ ПРАВИЛЬНО?
Справку все-таки почитать
wWwWw (2007-07-20 16:08:00) [6]
procedure TFormUstr.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
... //см. ниже
then ShowMessage('Ok!!!');
end;
Я пробовал так:
if (Key=Ord('D')) and (Shift=VK_SHIFT) and (Shift=VK_MENU)
я пробовал так:
if (keyDown(VK_MENU)) and (keyDown(VK_SHIFT)) and
(keyDown(ord('D')))
я пробовал так:
if Key=D_SHIFT_Alt ..что вроде этого было
КАК ЖЕ ПРАВИЛЬНО?
Anatoly Podgoretsky (2007-07-20 16:00:00) [7]> wWwWw (20.07.2007 15:49:13) [13]
Это вообще какой то дикий синтаксис, начиная с первой строчки.
Вообще то должно ругаться по поводу синтаксиса, а не типов, видимо еще где то выше ошибка и до этих строк дело не дошло.
wWwWw (2007-07-20 15:49:00) [8]я запутался:
uVirtKey = VK_F10
Ord(Key):=KEY_CTRL_B
ssCTRL in Shift
if (Key=67) and (Shift=ssCtrl)
Когда: VK_SHIFT, когда SHIFT, когда Ord(SHIFT), когда: ssSHIFT???
у меня постоянно одна и та-же ошибка: Incompatible types
Как же правильно написать Alt + Shift +D в процедуре: KeyDown формы?
Anatoly Podgoretsky (2007-07-20 13:43:00) [9]> wWwWw (20.07.2007 13:01:06) [6]
Параметр Shift
umbra (2007-07-20 13:41:00) [10]
> Но как здесь задать комбинацию клавиш?
для этого есть параметрshift. Для букв VK_буква = ord(буква).
Но все это, собственно, есть в справке по этим событиям
wWwWw (2007-07-20 13:21:00) [11]Чё-то пишет:
Types of actual and formal var parameters must be identical на (VK_CONTROL)
Types of actual and formal var parameters must be identical на (VK_SHIFT)
Types of actual and formal var parameters must be identical на (ord('D'))
Что не так?
Zagaevskiy (2007-07-20 13:11:00) [12]так это ж на кнопке только, чо ему на всех элементах делать чтоль?
wWwWw (2007-07-20 13:09:00) [13]> Dib@zol © (20.07.07 13:08) [7]
огромное спасибо!
Dib@zol (2007-07-20 13:08:00) [14]Тебе екзампл чтоли нужен? На лови:
function KeyDown(key:Word):boolean;
begin
result:=GetAsyncKeyState(key)<>0;
end;
procedure TForm1.Button1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (keyDown(VK_CONTROL))and(keyDown(VK_SHIFT))and(keyDown(ord('D'))) then ShowMessage('Поймал!!!');
end;
wWwWw (2007-07-20 13:01:00) [15]> umbra © (20.07.07 12:49) [5]
Да, да! Именно это я и видел! Вот, снова нашёл:
procedure TForm1.Button1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_escape then ShowMessage('ok');
end;
Но как здесь задать комбинациюклавиш?
И у кнопок-букв нет никаких VK_...
umbra (2007-07-20 12:49:00) [16]события OnKeyDown или OnKeyUp
Dib@zol (2007-07-20 12:45:00) [17]
> или всё-же GetAsyncKeyState?
стопудово :)
wWwWw (2007-07-20 12:41:00) [18]А мне казалось, что я где-то видел процедуру отслеживания нажатия клавиш, похожую на:
if Key in ['0'..'9'] then ...
или всё-же GetAsyncKeyState?
MsGuns (2007-07-20 12:05:00) [19]Самый простой способ - добавить TAction с этим шорткатом, а в обработчике написать нужный код
Dib@zol (2007-07-20 11:58:00) [20]GetAsyncKeyState()? В обработчике нажатия клавиши проставляем через AND три вызова Get<>0.