Есть программа, делающа непрерывную отрисовку
с помощью repeat. Если используется структура
....
repeat
....
until Keypressed;
....
repeat
....
until Readkey='q';
readkey ждет нажатия клавиши, поэтому работа программы приостанавливается.
Проще всего организовать примерно так:
repeat
ch := #0; // забываем предшествующее состояние
if keypressed then begin
ch := readkey;
case ch of
... // обработка нужных клавиш - изменение состояния
end; //case
end;
DrawScreen; // отрисовка нового состояния с учетом нажатых клавиш и прошедшего времени
until (ch = 'q') or (ch = 'Q'); // заботимся, чтобы работа программы не зависела от состояния Caps Lock
Спасибо, работает.
Еще один вопрос.
Я сделал-переменные
меняются по нажатию клавиши,
изменяя параметры отрисовки в непрерывном режиме.
Но как вывести текущее значение переменной на экран в режиме Graph?/
Либо как вообще выводятся переменные на экран в этом режиме?
to adriano-был по твоей ссылке.
Спрайтовая анимация-интересно, но ли это самый простой способ
вывести значения переменных на экран в режиме Graph?
теперь её усложняю. Вместо
program VisualSinusoid;
Uses Crt, Graph;
Const r = 80;
Label 1;
Var gd, gm: Integer; t,X,Y: Real;
Begin
InitGraph(gd,gm,''); t:=0;
1: X:=280;
SetColor(15);
Circle(120,240,r);
SetColor(2);
Line(120, 240, Round(120+r*cos(t)), Round(240+r*sin(t)));
Line(Round(120+r*cos(t)), Round(240+r*sin(t)),
280, Round(240+r*sin(t)) );
X:=X+1; Y:=240+r*sin(t);
PutPixel(Round(X), Round(Y), 11);
Delay(300);
SetColor(0);
Line(120, 240, Round(120+r*cos(t)), Round(240+r*sin(t)));
Line(Round(120+r*cos(t)), Round(240+r*sin(t)),
280, Round(240+r*sin(t)));
t:=t+0.05;
if X>600 then begin ClearDevice; goto 1; end
until KeyPressed;
CloseGraph
End.
program VisualSinusoid;
Uses Crt, Graph;
Const r = 80;
Label 1;
Var gd, gm: Integer; t,X,Y: Real;
Begin
InitGraph(gd,gm,''); t:=0;
program VisualSinusoid;
Uses Crt, Graph;
Label 1;
Var gd, gm,r: Integer; t,X,Y: Real;
ch:char;
Begin
InitGraph(gd,gm,''); t:=0; r = 80;
Procedure Upravlenie;
Begin {procedure}
ch:=#0;
if keypressed then begin
ch:=readkey;
case ch of
'i': r:=r+1;
'e': r:=r-1;
....
end; {case}
end; {if}
End;{procedure}
function IntToStr(i: Longint): String;
var s: string;
begin
Str(i, s);
IntToStr := s;
end;
setfillstyle(solidfill, getbkcolor);Вот и все...
bar(...); { тут дашь координаты, чтобы затереть старое значение }
outtextxy(..., IntToStr®); { <--- выводишь в том же месте новое значение }
еще 1 способ
var
key : char
begin
if keypressed = true then
begin
key := readkey ;
case ord(key) of
.........
end;
end;