Помощь - Поиск - Пользователи - Календарь
Полная версия: Прокрутка тектста...
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
x-x-x-x
Т.З необходимо написать прогу которая текстовый файл выводит на экран, и позволяет его прокручивать вверх или вниз (т.к тект длинный на экран не помещается).
P.S. так же хочиться поместить текст в рамочку, со школы помню что можно както прорисовывать маленькие полосочки без юсыса graph... напомните пожалуйста
volvo
Читай текст в массив строк (лучше - расположенный в динамической памяти), заводи переменную, показывающую, на сколько массив прокручен вверх (изначально, например, Scrolled = 0), и отображай столько строк, сколько помещается на экран, начиная с той, которая должна отображаться (т.е. со Scrolled + 1)...

Попробуй начать, если будут затруднения - говори, подскажем smile.gif

А рамочку чертить - это с использованием символов: #205#186#201#200#187#188
x-x-x-x
я так и думал smile.gif
x-x-x-x
не не пракатило - препод подонок сказал что криво. Говорит тект в массив это куйня. Я точно не понял но он что то говорил про то что можно как то обращатся к конкретным частям (символам) тектого файла..
Help me nea.gif
volvo
Угу... И пороть хард-диск постоянными к нему обращениями (да еще и "посимвольно", как он выразился... А если размер текста измеряется в сотнях килобайт?)... Это по его мнению, просто верх совершенства, правда?

Кстати, что именно ты ему показывал? Рассказал общую идею?
x-x-x-x
Нее Beta версию проги притащил там тока массив был статический на 500 string-off. Я просто не правельно выразился - он вроде как имел ввиду что мол к тектовый файл можно загружать в память ссереди там ну короче я сам толко мне понял
x-x-x-x
up smile.gif
volvo
Как вариант - без использования массивов:
uses crt;

procedure show_file(var f: text; var before: integer);
var
i: integer;
s: string;
begin
reset(f);

for i := 1 to before do readln(f, s);
gotoxy(1, 1);

if seekeof(f) and (before > 0) then dec(before)
else
while (wherey < 24) and (not seekeof(f)) do begin
readln(f, s);
write(s); clreol; writeln;
end;


for i := wherey to 24 do begin
gotoxy(1, i); clreol;
end;
end;

var
ch: char;
scrolled_up: integer;
f: text;

begin
assign(f, 'sc_me.txt');
reset(f);

scrolled_up := 0;

while true do begin

show_file(f, scrolled_up);
ch := readkey;
case ch of
#0:
case readkey of
#72: if scrolled_up > 0 then dec(scrolled_up);
#80: inc(scrolled_up);
end;
#27: break;
end;

end;

close(f);
end.
x-x-x-x
Куда нести пиво?


PS а как сделать всётаки построчную прокрутку а не поабзацную? Пробовал

Код


procedure show_file(var f: text; var before: integer);
var
  i: integer;
  s: string[80];                                                 {ОГРАНИЧЕЛ ДЛИННУ СТРОКИ}
begin
  reset(f);

  for i := 1 to before do read(f, s);                      {ИЗМЕНИЛ readln на read}
  gotoxy(1, 1);

  if seekeof(f) and (before > 0) then dec(before)
  else
    while (wherey < 24) and (not seekeof(f)) do begin
      readln(f, s);
      write(s); clreol; writeln;
    end;


  for i := wherey to 24 do begin
    gotoxy(1, i); clreol;
  end;
end;




x-x-x-x
Пару обзащев нормально прокручиват но потом останавливается.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.