Текущий архив: 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.46 MB
Время: 0.007 c