Главная страница
    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.008 c
15-1197217747
Grain
2007-12-09 19:29
2008.01.13
Выборы грядут


2-1197630727
9899100
2007-12-14 14:12
2008.01.13
FIBDataSet


2-1197737338
..::KraN::..
2007-12-15 19:48
2008.01.13
Проблема с TCoolBar


2-1197812487
@!!ex
2007-12-16 16:41
2008.01.13
Как поставить клавише в соответствие русский символ?


15-1196067535
vajo
2007-11-26 11:58
2008.01.13
Подскажите, какой принтер выбрать?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский