Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.01.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.017 c
15-1197116679
FEEEEEE
2007-12-08 15:24
2008.01.13
Ищу название фильма


15-1196971356
shaman
2007-12-06 23:02
2008.01.13
тормоза под Win2003


2-1197890251
темповик
2007-12-17 14:17
2008.01.13
Насчёт заставки вопрос!!!!


6-1177784081
Dmitry_177
2007-04-28 22:14
2008.01.13
не доходит значение типа integer


3-1189077558
Farel
2007-09-06 15:19
2008.01.13
Remote locate base





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский