Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо