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

Вниз

Проверка клавиш   Найти похожие ветки 

 
Elec3C ©   (2007-12-15 20:58) [0]

На форме есть 4 CheckBox"a и EditBox. В каждом CheckBox"е список выглядит так: Ctrl, Win, Alt, Shift. В EditBox юзер указывает клавишу, а программка сохраняет эту клавишу в переменную типа Byte, так же и с CheckBox"ами(Если, например, 1"ом CheckBox = Ctrl, то в переменной типа Byte, сохранятся код VK_CONTROL). Затем с помощь GetAsyncKeyState я проверяю указанные юзеров клавиши и выпоняю какое-либо действие. Проблема состоит как раз в проверке клавиш, которые указал юзер.

Т.Б. Допустим, что юзер указал в 1"ом CheckBox"е = Ctrl, в 3"ем = Alt, а в EditBox = "F", я должен проверить следующее:

...
var Key : array[0..4] of Byte;
...

if (GetAsyncKeyState(Key[0]) <> 0)
and
  (GetAsyncKeyState(Key[2]) <> 0)
and
  (GetAsyncKeyState(Key[4]) <> 0)
then
  { Выполняю какое-либо действие }

)

P.S. Ну не проверять же мне тупо все возможные варианты(Если Key[0] = 0 и Key[1] = 0; Если Key[0] = 0 и Key[1] = 0 и Key[2] = 0 и Key[3] = 0...).
P.P.S. Думаю, понятно объяснил.


 
guav ©   (2007-12-15 23:05) [1]

> Проблема состоит как раз в проверке клавиш, которые указал
> юзер.

В чём проблема ?


> я должен проверить следующее:


Где происходит проверка ?
Почему GetAsyncKeyState ?

Почему не применить TShortCut ?

Может, вообще стоит применить THotKey


 
Elec3C ©   (2007-12-16 00:29) [2]

Да, видать, не поняли.

Допустим, если клавиша установлена в CheckBox1, а в остальных нет, то я пишу такой код:
if (GetAsyncKeyState(Key[0]) <> 0) then
  { Выполняю како-либо действие }

Если клавиша установлена в CheckBox1 и CheckBox3 и в EditBox, то я пишу:
if (GetAsyncKeyState(Key[0]) <> 0) and
  (GetAsyncKeyState(Key[2]) <> 0) and
  (GetAsyncKeyState(Key[4]) <> 0) then
 { Выполняю какое-либо действие }

P.S. Нужно создать некое множество, в него добавлять, то что установлено(из CheckBox"ов и EditBox"а) и проверять это множество. Или как-то по-другому?


 
Германн ©   (2007-12-16 00:51) [3]


> P.S. Нужно создать некое множество, в него добавлять, то
> что установлено(из CheckBox"ов и EditBox"а) и проверять
> это множество.

Ну так и создай его.

type
 TAsyncKey = (kCtrl, kWin, kAlt, kShift);
 TAsyncKeys = set of TAsyncKey;
var
 AsyncKeys = TAsyncKeys;

 if AsyncKeys <> [] then


 
Servelat   (2007-12-16 01:09) [4]

> Если клавиша установлена в CheckBox1 и CheckBox3 и в EditBox,
> то я пишу:
> if (GetAsyncKeyState(Key[0]) <> 0) and
>  (GetAsyncKeyState(Key[2]) <> 0) and
>  (GetAsyncKeyState(Key[4]) <> 0) then
> { Выполняю какое-либо действие }


var
 B: Boolean;

...

 B := True;

 for I := 0 to KeyCount - 1 do
   if Key[I] <> 0 then
     B := B and (GetAsyncKeyState(Key[I]) <> 0));

 if B then
 begin
   // нажата нужная комбинация...
 end;


 
Servelat   (2007-12-16 01:12) [5]

Под

if Key[I] <> 0 then

Понималась проверка, что соответствующий CheckBox/Edit включен/заполнен.


 
Германн ©   (2007-12-16 02:14) [6]


> Elec3C ©   (16.12.07 00:29) [2]
>
> Да, видать, не поняли.
>

Ну а как тут понять? Задача-то не поставлена. Есть только "дурной" вопрос по "некоему решению". А вот чего следует решить - темный лес. (Norwegin wood :)


 
Elec3C ©   (2007-12-16 02:19) [7]

Всем спасибо.


 
guav ©   (2007-12-16 02:20) [8]


> Допустим, если клавиша установлена в CheckBox1, а в остальных
> нет, то я пишу такой код:
> if (GetAsyncKeyState(Key[0]) <> 0) then
>  { Выполняю како-либо действие }
>
> Если клавиша установлена в CheckBox1 и CheckBox3 и в EditBox,
> то я пишу:
> if (GetAsyncKeyState(Key[0]) <> 0) and
>  (GetAsyncKeyState(Key[2]) <> 0) and
>  (GetAsyncKeyState(Key[4]) <> 0) then
> { Выполняю какое-либо действие }

Ну это можно записать так:

if (not checkbox1.checked or (GetAsyncKeyState(Key[0]) <> 0)) and
 (not checkbox2.checked or (GetAsyncKeyState(Key[2]) <> 0)) and
 (not checkbox3.checked or (GetAsyncKeyState(Key[4]) <> 0)) then


 
Германн ©   (2007-12-16 03:08) [9]


> Германн ©   (16.12.07 02:14) [6]

Позор мне, позор! Я сделал очепятку в названии одной из моих самых любимых песен Битлз.
:(



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

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

Наверх




Память: 0.49 MB
Время: 0.015 c
15-1196840159
Unknown user
2007-12-05 10:35
2008.01.13
Многомониторность


15-1197276822
ArtemESC
2007-12-10 11:53
2008.01.13
А вы ели когда-нибудь насекомых?


15-1197142644
Cerberus
2007-12-08 22:37
2008.01.13
Посоветуйте рок группу и альбом.


15-1197029259
Dennis I. Komarov
2007-12-07 15:07
2008.01.13
Знатокам Linux


15-1197196071
Kostafey
2007-12-09 13:27
2008.01.13
С днем рождения ! 9 декабря