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

Вниз

Как отследить нажатие комбинации клавиш?   Найти похожие ветки 

 
wWwWw   (2007-07-20 11:54) [0]

Как отследить нажатие комбинации клавиш, например:
Alt + Shift +D
???


 
Dib@zol ©   (2007-07-20 11:58) [1]

GetAsyncKeyState()? В обработчике нажатия клавиши проставляем через AND три вызова Get<>0.


 
MsGuns ©   (2007-07-20 12:05) [2]

Самый простой способ - добавить TAction с этим шорткатом, а в обработчике написать нужный код


 
wWwWw   (2007-07-20 12:41) [3]

А мне казалось, что я где-то видел процедуру отслеживания нажатия клавиш, похожую на:
if Key in ["0".."9"] then ...

или всё-же GetAsyncKeyState?


 
Dib@zol ©   (2007-07-20 12:45) [4]


> или всё-же GetAsyncKeyState?

стопудово :)


 
umbra ©   (2007-07-20 12:49) [5]

события OnKeyDown или OnKeyUp


 
wWwWw   (2007-07-20 13:01) [6]

> 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_...


 
Dib@zol ©   (2007-07-20 13:08) [7]

Тебе екзампл чтоли нужен? На лови:

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:09) [8]

> Dib@zol ©   (20.07.07 13:08) [7]
огромное спасибо!


 
Zagaevskiy ©   (2007-07-20 13:11) [9]

так это ж на кнопке только, чо ему на всех элементах делать чтоль?


 
wWwWw   (2007-07-20 13:21) [10]

Чё-то пишет:
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"))

Что не так?


 
umbra ©   (2007-07-20 13:41) [11]


> Но как здесь задать комбинацию клавиш?

для этого есть параметр shift. Для букв VK_буква = ord(буква).
Но все это, собственно, есть в справке по этим событиям


 
Anatoly Podgoretsky ©   (2007-07-20 13:43) [12]

> wWwWw  (20.07.2007 13:01:06)  [6]

Параметр Shift


 
wWwWw   (2007-07-20 15:49) [13]

я запутался:
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 16:00) [14]

> wWwWw  (20.07.2007 15:49:13)  [13]

Это вообще какой то дикий синтаксис, начиная с первой строчки.
Вообще то должно ругаться по поводу синтаксиса, а не типов, видимо еще где то выше ошибка и до этих строк дело не дошло.


 
wWwWw   (2007-07-20 16:08) [15]

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 ..что вроде этого было
КАК ЖЕ ПРАВИЛЬНО?


 
iXT ©   (2007-07-20 16:14) [16]

> КАК ЖЕ ПРАВИЛЬНО?

Справку все-таки почитать


 
wWwWw   (2007-07-20 16:33) [17]

Справку все-таки почитать

так я по справке всё это и пробовал!


 
iXT ©   (2007-07-20 16:41) [18]

Не верю (С)


 
Anatoly Podgoretsky ©   (2007-07-20 16:43) [19]

> wWwWw  (20.07.2007 16:33:17)  [17]

Читать про множества, а примеры в Дельфи по данной части вполне адекватные.


 
wWwWw   (2007-07-20 17:21) [20]

Похоже дело не в неправильном написании!
Я буковка в буковку переписываю то - что в справке:
if (ssShift in Shift) and (Key = ord("Y")) then
Но при нажатии на эти клавиши не получаю ничего, кроме писка из системного динамика!

Что это? - Конфликт с какой-то процедурой?



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

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

Наверх




Память: 0.51 MB
Время: 0.032 c
15-1185089375
alien1769
2007-07-22 11:29
2007.08.19
Ошибка при старте delphi32.exe (2-х ядерный процессор)


3-1178274065
Sapos
2007-05-04 14:21
2007.08.19
Добавление записей.


2-1185365577
AZIZE
2007-07-25 16:12
2007.08.19
Поиск в графе


2-1184705148
JetAPI
2007-07-18 00:45
2007.08.19
TListView; закрасить/затереть текст в колонке.


2-1185531876
Егоров А.Н.
2007-07-27 14:24
2007.08.19
Проверка существования формы перед ее открытием