Помощь - Поиск - Пользователи - Календарь
Полная версия: Скролинг
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Renbo
Имеем Типизированный фаил. Работаем последовательным доступом.

Имеется вот такая процедурка вывода ввиде таблички.

procedure vivod2;
var
  i:integer;
Begin
  clrscr;
  i:=0;
  assign(spravochnik2,'spravka2');
  reset(spravochnik2);
  writeln('----------------------------------------------------------------------------');
  writeln('№':3,'   Табельный            ФИО                    Семейное        Количество');
  writeln('       Номер            сотрудника                положение         детей    ');
  writeln('----------------------------------------------------------------------------');
  with Zap2 do
  while not eof(spravochnik2) do
    begin
      inc(i);
      write(i:3);
      read(spravochnik2,Zap2);writeln(TabNom:9,FIOsotr:30,SP:15,Deti:14);
    end;
  close(spravochnik2);
End;




Проблема: Если записей будет более 20 что ли...то в итоге паскаль выводит на экран только последние несколько записей, при этом не видна шапка. Как я понял лучше шапку выделить в отдельную процедуру. А вот с самим выводом как быть? хочется, чтобы он прокручивался по нажатию на стрелочки вниз-вверх
volvo
Погоди... Я по-моему только на днях показывал, как это делается - где-то совсем рядом - там правда по 15 записей надо было... Сейчас покажу, где...

P.S.
Вот оно: Распределение большого кол-ва Записей
Tan
Распределение большого кол-ва Записей - посмотри на этой странице в этом разделе, я создавал тему с таким же смыслом как и твоя!
Renbo
Всё хорошо, спасиб большое, но есть НО. Мне желательно нумерацию записей сохранить. Тоесть если я вывожу по 10, а у меня их 15, то на следующей странице он начнёт показ с 11й.

И ещё, Esc какой номер имеет? )

klem4
Цитата
И ещё, Esc какой номер имеет? )


#27
volvo
Цитата
Тоесть если я вывожу по 10, а у меня их 15, то на следующей странице он начнёт показ с 11й.


Цитата
writeln (curr_pos + i,'  ',PersonName:10,'   ',
          Surname:11 ,' ',Education,:13,' ',Post:20,' ',Experience:5,' ',Payment:7:1);
Тут как раз этим и занимается curr_pos + i... Так и задумывалось...
Renbo
Спасиб, мне показалось, что там не то написано, а когда переписывал у себя поставил просто i )
Спасиб тебе большое, Volvo.

Осталось переделать этот алгоритм для типизированного с последовательным доступом, без сика придётся...
Кстати, мож в ФАК положишь ээтот алгоритм?
volvo
Может быть... Надо будет доработать его только ... Я подумаю. smile.gif
Renbo
Я смог всё-таки сделать без seek и filepose ))


procedure vivodShapki;

Begin
  clrscr;
  writeln('----------------------------------------------------------------------------');
  writeln('№':3,'   Табельный            ФИО                    Семейное        Количество');
  writeln('       Номер            сотрудника                положение         детей    ');
  writeln('----------------------------------------------------------------------------');
end;


procedure vivodilka;
var
  k,curr_pos,n,p:integer;
  refresh:boolean;
Begin
  assign(spravochnik2,'spravka2');
  reset(spravochnik2);
  curr_pos:= 0;
  refresh:=true;
  while not eof(spravochnik2) do
    begin
      read(spravochnik2,Zap2);
      inc(n);
    end;
  repeat
    if refresh then
      begin
        reset(spravochnik2);
        k:=1;
        vivodShapki;
        p:=0;
        repeat
          read (spravochnik2,Zap2);
          If k in [curr_pos+1..curr_pos+10] then
            with Zap2 do
              begin
                inc(p);
                write(curr_pos+p:3);
                writeln(TabNom:9,FIOsotr:30,SP:15,Deti:14);
              end;
          inc(k);
        until (eof(spravochnik2));
        refresh:=false;
      end;
    case ord(readkey) of
      80:if curr_pos+10 < n then
            begin
              inc(curr_pos,10);
              refresh:=true;
            end;
      72:if curr_pos-10>=0 then
            begin
              dec(curr_pos, 10);
              refresh:=true;
            end;
      13:break;
    end;
  until false;
  close(spravochnik2);
End;




Пашет, но есть 1 нюанс: когда он выведит последнию страницу с записями, то дальше можно будет листать, но будут пустые листы...вот как бы это заблочить?
volvo
Добавь условие:

case ord(readkey) of
  80:if (curr_pos+10 < n) and (not eof(spravochnik2)) then ...


Это должно дать необходимый тебе эффект, если я не ошибаюсь...
Renbo
да вроде так должно быть, но не помогло.... Вот доработать бы и можно будет постить в ФАК )
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.