В общем полазил по ФАК'у - ничего по модулю CRT вроде нет... мож, конечно, плохо искал...
А при попытке в поиске набрать "Модуль CRT" пишет, что одно из слов слишком короткое...
Вот и решил тему создать.
Задание такое:
Создать окно в рамке на фоне, заполненном псевдографическим символом #178 зеленого цвета, с текстом из файла. По клавишам управления курсором выполнять скроллинг текста в окне на одну строку вверх или вниз.
пара вопросов:
как окно создать - понятно...
Фон... Тут нужно использовать процедуру TextBackground? Но ведь тогда зеленый фон будет только там, где есть текст, верно? Или так и надо? Или закрасить все окно прямоугольником, а потом, в графическом режиме выводить текст?
Как сделать рамку?
Скроллинг я думаю организовать так:
Вывести в окошко текст c k=1 строки по k+n (n - количество строк, умещающееся в окне),потом, если нажата клавиша вниз, то окошко очистить и вывести текст с k=k+1 строки по k+n, если нажата клавиша вверх, то окошко очистить и вывести текст с k=k-1 строки по k+n. Это нормально? или стоит сделать как-то по-другому?
Был бы благодарен за ответы!
Unknown, ты для себя-то реши, тебе модуль CRT или
volvo, ок, значит прямоугольник отпадает
Меня вот больше всего рамка интересует... как ее сделать?
Рамку? Отчерчивать вручную символами (#179 '|', #196 '-', и угловые #192, #217, #218, #191)...
А насчет скроллинга - загляни сюда, запусти программу:
http://forum.pascal.net.ru/index.php?s=&showtopic=10233&view=findpost&p=67757
Рамка -
procedure windowBorder;
const
w = 50;
h = 20;
var
i:integer;
begin
clrscr;
Write(#218);
for i:=1 to w do
write(#196);
write(#191);
writeln;
for i:=2 to h do
writeln(#179,#179:w+1);
Write(#192);
for i:=1 to w do
write(#196);
write(#217);
end;
Не повериш у меня было такое же задание)) Вот прога, счение из файла идет c:\1.txt, хочеш из другой папки измени путь. Рамки нет.
Прикрепленные файлы
Lab_12.pas ( 968 байт )
Кол-во скачиваний: 300
skAmZ, я бы этот БРЕД просто постеснялся выкладывать...
Тем более, что по заданию
uses crt;
begin
end.
Тут база. Что рамки нет я сказал. Ракму в ручную добавить не проблема.
"БРЕД" - не понял, это ты к чему. Прога работает!)))
Всем большое спасибо! Вроде бы что-то получилось:
program T10_V1;
uses crt;
var i,k:integer; f:text; s:string; c:char;
procedure windowBorder;
begin
textcolor(black);
clrscr;
Write(#218);
for i:=1 to 50 do
write(#196);
write(#191);
writeln;
for i:=2 to 20 do
writeln(#179,#179:51);
Write(#192);
for i:=1 to 50 do
write(#196);
write(#217);
end;
begin
textbackground(yellow);
clrscr;
WindowBorder;
window(2,2,51,20);
textbackground(178);
clrscr;
k:=1;
repeat
clrscr;
i:=1;
assign(f,'text.txt');
reset(f);
while i<k+18 do
begin
if i<=k then
begin
for i:=1 to k-1 do
readln(f,s);
i:=k;
end;
readln(f,s);
writeln(s);
inc(i);
end;
close(f);
c:=readkey;
if (c=#72) and (k>1) then dec(k) else if c=#80 then inc(k);
until c=#27;
end.
Malice, спасибо большое!
Я, оказывается, неправильно понял задание про фон - думал, что текст должен выводиться на фоне этих самых символов, а оказалось - окно на этом фоне!
И еще раз всем большое спасибо!
Вот, если кому надо, - переделал:
program T10_V1;
uses crt;
var i,k:integer; f:text; s:string; c:char;
procedure windowBorder;
begin
textcolor(black);
clrscr;
Write(#218);
for i:=1 to 50 do
write(#196);
write(#191);
for i:=2 to 20 do
write(#179,#179:51);
Write(#192);
for i:=1 to 50 do
write(#196);
write(#217);
end;
begin
textbackground(yellow);
clrscr;
for i:=1 to 1999 do
write(#178);
window(1,1,52,22);
textbackground(green);
clrscr;
WindowBorder;
window(2,2,51,20);
textbackground(green);
clrscr;
k:=1;
repeat
clrscr;
i:=1;
assign(f,'text.txt');
reset(f);
while i<k+18 do
begin
if i<=k then
begin
for i:=1 to k-1 do
readln(f,s);
i:=k;
end;
readln(f,s);
writeln(s);
inc(i);
end;
close(f);
c:=readkey;
if (c=#72) and (k>1) then dec(k) else if c=#80 then inc(k);
until c=#27;
end.