![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать цикл пока не нажата клавиша? [D6]
maxim2 © (2002-08-07 06:31:00)Привет всем!
Вот собсно и всё.
Ученик (2002-08-07 11:16:00) [1]function KeyPressed : Boolean;
var
Msg : TMsg;
begin
while GetMessage(Msg, 0, 0, 0) and
(Msg.Message <> WM_QUIT) and (Msg.Message <> WM_KEYDOWN) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
Result := True
end;
PVOzerski (2002-08-07 10:58:00) [2]>repeat
>.....
>until KeyPressed=<здесь код клавиши>;
такое можно только в проге с "левым" Crt-совместимым модулем (такие можно найти) и, естественно, либо консольной, либо с "извращенным" GUI вроде WinCrt от BP7 (А ведь автор вопроса указал D6).
>GetAsyncKeyState
Вот это - действительно то, что надо. Только сработает безотносительно того, какая форма и даже данное ли приложение активно. А такая ситуация нужна не всегда, придётся вставлять проверку дополнительных условий.
Есть еще варианты, завязанные на обработку событий активного окна (но в том числе и на OnKeyPress). При этом либо в цикл вставляется Application.ProcessMessages (что замедляет счёт в цикле), либо цикл запускается в отдельном потоке. В ответ на событие обработчик меняет значение некоего флага, которое проверяем в нашем цикле и по его изменению делаем break.
c0pYc@t (2002-08-07 10:18:00) [3]repeat
.....
until KeyPressed=<здесь код клавиши>;
VAleksey (2002-08-07 10:09:00) [4]
> Polevi © (07.08.02 09:16)
ввиду клавиша а не кнопка.
Polevi (2002-08-07 09:16:00) [5]flag:=true;
while flag do
begin
Application.ProcessMessages;
...
end;
procedure Button1Click
begin
flag:=false;
end;
VAleksey (2002-08-07 07:31:00) [6]GetAsyncKeyState
GetKeyboardState
посмотри описание на них в файле Win32.hlp.