IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Распределение большого кол-ва Записей, помочь переделать процедуру
Tan
сообщение 4.04.2007 11:30
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


Написал процедурку которая выводит на экран в виде таблицы записи. Прошу вас помоч дополнить её следующим : необходимо, чтобы, при условии, когда количество записей будет больше 15, программа каждые 15 записей выводила в окне window(1,1,80,25) - {я уже подсчитал, это будут координаты окна если записей будет 15}, и при этом переключаться к следующей порции записей можно только нажав клавишу вправо, а вернуться к предыдущей - влево. Очень нуждаюсь в вашей помощи!!
procedure Content (var fails: MyFile; filename: string);
var i: integer; REC: Option; nos: string;
begin
assign (fail, filename);
{$I-}
reset (fail);
{$I+}
CLRSCR;
TextColor (Blue);
Textbackground(White); Clrscr;
TextColor(black);
repeat
read (fail, REC);
end;
with REC do
begin
textcolor (Black);
writeln (i,' ',PersonName:10,' ',Surname:11 ,' ',Education,:13,' ',Post:20,' ',Experience:5,' ',Payment:7:1);
inc (i);
end;
until eof (fail);
close (fail);
textcolor (black);
textbackground(white);
end;


Сообщение отредактировано: Tan - 4.04.2007 11:32


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 4)
volvo
сообщение 4.04.2007 11:45
Сообщение #2


Гость






Алгоритм примерно такой:

curr_pos := 0;
refresh := true;

repeat

if refresh then begin
seek(fail, curr_pos);
i := 1;
repeat
read (fail, REC);
with REC do begin
textcolor (Black);
writeln (curr_pos + i,' ',PersonName:10,' ',
Surname:11 ,' ',Education,:13,' ',Post:20,' ',Experience:5,' ',Payment:7:1);
inc (i);
end;
until (i > 15) or (eof (fail));
refresh := false;

end;

case readkey of
{ клавиша "вправо" }
if curr_pos + 15 < filesize(fail) then begin
inc(curr_pos, 15); refresh := true;
end;
{ клавиша "влево" }
if curr_pos - 15 >= 0 then begin
dec(curr_pos, 15); refresh := true;
end;
{ кнопка "Escape" }
break;
end;

until false;


Присоединишь программу - скажу точнее, как реализовать это...

Сообщение отредактировано: volvo - 4.04.2007 11:46
 К началу страницы 
+ Ответить 
Tan
сообщение 4.04.2007 12:11
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


спасибо, сейчас попробую это осмыслить, если остануться вопросы, то выложу код.


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Tan
сообщение 4.04.2007 13:53
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


С алгоритмом всё понятно, он даёт даже больше, чем я хотел. Небольшое уточнение : если я использую модули Dos и CRT то главное окощко (то есть весь экран) и будет (1,1,80,25) ? Так как на мой взгляд вопрос касается основного в этой теме, то новую я не стал создавать.

Сообщение отредактировано: Tan - 4.04.2007 13:59


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 4.04.2007 15:04
Сообщение #5


Гость






Вообще-то лучше определять размеры окна в зависимости от того режима, который ты используешь... Например, количество столбцов хранится в байте по адресу: $0:$044A

Если ты уверен, что используется режим именно с 25 строками, а не с 43 или 50, то можно назначить окно и вручную, именно через
Window(1, 1, 80, 25);
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 19:10
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"