Есть программа, делающа непрерывную отрисовку с помощью repeat. Если используется структура
....
repeat
....
until Keypressed;
на экраине идет непрерывная отрисовка, до нажатия любой клавиши. Но если поменять на
....
repeat
....
until Readkey='q';
Программа выходит по нажатию клавиши q, но работает только при нежатии любой другой клавиши(нажал и не отпускаешь). Как совместить непрерывность отрисовки с управлением с клавиатуры?
andriano
6.01.2008 3:57
readkey ждет нажатия клавиши, поэтому работа программы приостанавливается. Проще всего организовать примерно так:
repeat
ch := #0; // забываем предшествующее состояние
if keypressed thenbegin
ch := readkey;
case ch of
... // обработка нужных клавиш - изменение состояния
end; //case
end;
DrawScreen; // отрисовка нового состояния с учетом нажатых клавиш и прошедшего времени
until (ch = 'q') or (ch = 'Q'); // заботимся, чтобы работа программы не зависела от состояния Caps Lock
Чужак
6.01.2008 4:29
Спасибо, работает.
Чужак
9.01.2008 3:52
Еще один вопрос. Я сделал-переменные меняются по нажатию клавиши, изменяя параметры отрисовки в непрерывном режиме. Но как вывести текущее значение переменной на экран в режиме Graph?/ Либо как вообще выводятся переменные на экран в этом режиме?
volvo
9.01.2008 3:59
Цитата
как вообще выводятся переменные на экран в этом режиме?
Переменные или их значения? Значения - переводятся в строку и печатаются (outtext/outtextxy)
Чужак
9.01.2008 4:03
Цитата(volvo @ 8.01.2008 23:59)
Переменные или их значения? Значения - переводятся в строку и печатаются (outtext/outtextxy)
Их значения. И все происходит при непрерывной отрисовке на экране. При этом значения переменных меняются с клавиатуры (соответственно меняются параметры отрисовки).
Чужак
15.01.2008 4:58
to adriano-был по твоей ссылке. Спрайтовая анимация-интересно, но ли это самый простой способ вывести значения переменных на экран в режиме Graph?
Цитата(volvo @ 8.01.2008 23:59)
Переменные или их значения? Значения - переводятся в строку и печатаются (outtext/outtextxy)
Как это сделать? Как значение переменной типа Integer или Real перевести в строку и вывести на экран в ходе цикла (оно ведь меняется при нажатии кнопки)?
volvo
15.01.2008 13:11
Цитата
Как значение переменной типа Integer или Real перевести в строку и вывести на экран в ходе цикла
Показать кусок кода, что именно у тебя там происходит, КАК собственно меняется значение и КОГДА ты хочешь его выводить (и перестать делать заключение, что вокруг тебя находятся одни телепаты)...
Ну, и посмотреть доки неплохо было бы: Str + F1 получаешь готовую реализацию IntToStr. С вещественными - аналогично...
Чужак
16.01.2008 1:16
Цитата(volvo @ 15.01.2008 9:11)
Показать кусок кода, что именно у тебя там происходит, КАК собственно меняется значение и КОГДА ты хочешь его выводить (и перестать делать заключение, что вокруг тебя находятся одни телепаты)...
Сейчас покажу. В теме "Графика. Двужущаяся точка. Точка совершает колебания" я приводил программу
program VisualSinusoid;
Uses Crt, Graph;
Const r = 80;
Label1;
Var gd, gm: Integer; t,X,Y: Real;
Begin
InitGraph(gd,gm,''); t:=0;
r становится переменной:
program VisualSinusoid;
Uses Crt, Graph;
Label1;
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 thenbegin
ch:=readkey;
case ch of'i': r:=r+1;
'e': r:=r-1;
....
end; {case}end; {if}End;{procedure}
она вызывается из тела программы (из цикла). Все работает, но как выводить на экран значение r?
volvo
16.01.2008 1:29
Цитата
как выводить на экран значение r?
Очень просто: появляется функция
function IntToStr(i: Longint): String;
var s: string;
begin
Str(i, s);
IntToStr := s;
end;
в конце процедуры Upravlenie делается:
setfillstyle(solidfill, getbkcolor);
bar(...); { тут дашь координаты, чтобы затереть старое значение }
outtextxy(..., IntToStr(r)); { <--- выводишь в том же месте новое значение }
Вот и все...
Гость
21.01.2008 0:49
еще 1 способ
var
key : char
begin
if keypressed = true then
begin
key := readkey ;
case ord(key) of .........
end;
end;
andriano
21.01.2008 12:39
Цитата(Гость @ 20.01.2008 20:49)
еще 1 способ ...
И чем этот способ отличается от приведенного в посте №2? Только наличием безграмотной конструкции keypressed = true? Почему тогда не ((keypressed = true) = true) = true?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.