Всем доброго времени суток!
Такая проблема:
я использую цикл для смены координат объекта, то есть за один проход цикла перерисовываю круг с помощью DrawCircle на новое место с изменившейся координатой. Запускается цикл нажатием клавиши, соответствующей направлению движения. Вот кусок кода:
procedure KeyDown(Key: integer);
begin
if Key = VK_Enter then start //провека Enter
else begin
LockDrawing;
repeat
Window.Clear;
case Key of
VK_Left: x := x - 1; //влево
VK_Right: x := x + 1; //вправо
VK_Up: y := y + 1; //вверх
VK_Down: y := y - 1; //вниз
VK_Space: break;
end;
DrawCircle(x, y, r);
Redraw;
Sleep(1);
until key = VK_Space; //здесь не уверен, что писать в условии
end;
end;
begin
y := 100; //y
x := 100; //x
r := 10; //радиус
TextOut(250, 200, 'Pess enter to start');
OnKeyDown := KeyDown;
end.
uses graphabc;
var
x, y, r : integer;
dx, dy :integer;
stop : boolean := true;
procedure Start;
begin
stop := false;
LockDrawing;
repeat
Window.Clear;
x := x + dx; y := y +dy;
DrawCircle(x, y, r);
Redraw;
Sleep(1);
until stop;
Halt;
end;
procedure KeyDown(Key: integer);
begin
case Key of
VK_Enter : stop := false;
VK_Left : begin dx := -1; dy := 0; end; // влево
VK_Right : begin dx := 1; dy := 0; end; // вправо
VK_Up : begin dx := 0; dy := -1; end; // вверх
VK_Down : begin dx := 0; dy := 1; end; // вниз
VK_Space : stop := true; // стоп
end;
end;
begin
y := 100; //y
x := 100; //x
r := 10; //радиус
TextOut(250, 200, 'Press enter to start');
OnKeyDown := KeyDown;
repeat Sleep(1) until not stop; // Ждем нажатия на Enter
Start;
end.
Спасибо огромное! Понял свою ошибку.
А как выйти из обработчика? Ну, то есть, он отработал, но после этого надо выполнить код, который находиться после точки вызова обработчика. Что только не пробовал, ничего не помогло.
Halt;в процедуре
Start;выполнение вернётся в обратно
main;