![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
KeyDown [D2005, XP]
Nikss © (2006-08-25 09:58:00)Здравствуйте! Подскажите, пожалуйста, ответ на такой глупый вопрос: у меня есть процедура FormKeyDown, в которой в случае нажатия определенной клавиши обрабатывается соответствующее событие. Мне нужно в другой процедуре записать такое условие: "пока ни одна из предусмотренных клавиш не нажата, выполнять такое-то действие". Как это записать?
DevilDevil (2006-08-25 16:51:00) [1]в процедуре
OnIdleсразу послеbeginнадо написатьDone := false;
DevilDevil (2006-08-25 16:29:00) [2]
KeyArray : array[0..255] of boolean;
OnCreate:
var i : integer;
begin
for i := 0 to 255 do KeyArray[i] := false;
end;
OnKeyDown:
KeyArray[Key] := true;
OnKeyUp:
KeyArray[Key] := false;
function IsKeyPressed(Key : byte) : boolean;
begin
Result := KeyArray[Key];
end;
Кидаешь на форму компонент ApplicationEvents
По событиюOnIdleпишешь:
begin
if KeyPressed(VK_ESCAPE) then Application.Terminate;
if KeyPressed(VK_LEFT) then ; //переместить игрока влев
if KeyPressed(VK_RIGHT) then ; //переместить игрока вправо
// и т.д.
end;
Сергей М. (2006-08-25 10:15:00) [3]var SomeKeyPressed: Boolean; //глоб.переменная
в обработчике FormKeyDown:
if Key := ... then SomeKeyPressed := True;
..
в процедуре:
while not (Application.Terminated or SomeKeyPressed) do begin
DoSomething;
Application.ProcessMessages;
end;
SomeKeyPressed := False;
Ketmar (2006-08-25 10:11:00) [4]игру пишем?
вариантов много.
а) изменить логику работы программы;
б) appEvents.OnIdle();
в) таймер.
пока хватит.