Помощь - Поиск - Пользователи - Календарь
Полная версия: скрулинг
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Client
Всем привет!
Вот попытался сделать прокрутку массива на экране. Идея вообщем то не сложная, но не получается реализовать ((
uses crt;
var
a:array[1..30] of byte;
i:byte;
y,y1,yn:byte;
c:char;
begin
textbackground(black);
clrscr;
for i:=1 to 30 do a[i]:=i;
for i:=1 to 24 do writeln(a[i]);
write(a[25]);
gotoxy(1,25);
textbackground(green);
write(a[25]);
y:=25;
yn:=1;
repeat
c:=readkey;
y1:=y;
if c=#0 then c:=readkey;
if c=#80 then begin
inc(y);
yn:=y-24;
if y>31 then y:=31;
if y in [1..25] then begin
gotoxy(1,y1);
textbackground(black);
write(a[y1]);
gotoxy(1,y);
textbackground(green);
write(a[y]);
end
else if y in [26..30] then begin
gotoxy(1,1);
delline;
gotoxy(1,24);
textbackground(black);
write(a[y-1]);
gotoxy(1,25);
textbackground(green);
write(a[y]);
end;
end;
if c=#72 then begin
dec(y);
if y=30 then y:=29;
if y in [26..30] then yn:=y-24;
if y=0 then y:=1;
if y in [6..30] then begin
gotoxy(1,y-4);
textbackground(black);
write(a[y+1]);
gotoxy(1,y-5);
textbackground(green);
write(a[y]);
end
else if y in [2..5] then begin
textbackground(black);
gotoxy(1,25);
clreol;
gotoxy(1,1);
insline;
textbackground(green);
write(a[yn])
end;
end;
until c=#13;
end.
volvo
Я бы делал что-то вот в этом роде:
uses crt;

function min(a, b: integer): integer;
begin
if a < b then min := a else min := b;
end;

procedure print_arr(start_from: integer;
const arr: array of integer; const n: integer);
var i: integer;
begin
clrscr;
for i := 0 to n - 1 do begin
writeln(arr[start_from + i]);
end;
end;

const
size = 60;
screen_h = 25;
var
arr: array[0 .. pred(size)] of integer;
i, scrolled, count: integer;
ch: char;

begin
scrolled := 0;
count := min(screen_h, size);

for i := 0 to pred(size) do arr[i] := i + 1;
print_arr(scrolled, arr, count);
repeat
ch := readkey;
case ch of
#0:
case readkey of
#80:
if scrolled + screen_h < size then begin
inc(scrolled);
print_arr(scrolled, arr, count);
end;
#72:
if scrolled > 0 then begin
dec(scrolled); print_arr(scrolled, arr, count);
end;

end;
end;
until ch = #27;

end.
Client
Спасибо! good.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.