Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Прокрутка тектста...

Автор: x-x-x-x 4.10.2006 18:01

Т.З необходимо написать прогу которая текстовый файл выводит на экран, и позволяет его прокручивать вверх или вниз (т.к тект длинный на экран не помещается).
P.S. так же хочиться поместить текст в рамочку, со школы помню что можно както прорисовывать маленькие полосочки без юсыса graph... напомните пожалуйста

Автор: volvo 4.10.2006 18:15

Читай текст в массив строк (лучше - расположенный в динамической памяти), заводи переменную, показывающую, на сколько массив прокручен вверх (изначально, например, Scrolled = 0), и отображай столько строк, сколько помещается на экран, начиная с той, которая должна отображаться (т.е. со Scrolled + 1)...

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

А рамочку чертить - это с использованием символов: #205#186#201#200#187#188

Автор: x-x-x-x 4.10.2006 18:56

я так и думал smile.gif

Автор: x-x-x-x 13.10.2006 15:25

не не пракатило - препод подонок сказал что криво. Говорит тект в массив это куйня. Я точно не понял но он что то говорил про то что можно как то обращатся к конкретным частям (символам) тектого файла..
Help me nea.gif

Автор: volvo 13.10.2006 15:45

Угу... И пороть хард-диск постоянными к нему обращениями (да еще и "посимвольно", как он выразился... А если размер текста измеряется в сотнях килобайт?)... Это по его мнению, просто верх совершенства, правда?

Кстати, что именно ты ему показывал? Рассказал общую идею?

Автор: x-x-x-x 13.10.2006 18:38

Нее Beta версию проги притащил там тока массив был статический на 500 string-off. Я просто не правельно выразился - он вроде как имел ввиду что мол к тектовый файл можно загружать в память ссереди там ну короче я сам толко мне понял

Автор: x-x-x-x 14.10.2006 22:20

up smile.gif

Автор: volvo 14.10.2006 22:38

Как вариант - без использования массивов:

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 23.10.2006 15:42

Куда нести пиво?


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 23.10.2006 15:50

Пару обзащев нормально прокручиват но потом останавливается.