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

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

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

Автор: Unknown 12.06.2006 20:02

В общем полазил по ФАК'у - ничего по модулю CRT вроде нет... мож, конечно, плохо искал...
А при попытке в поиске набрать "Модуль CRT" пишет, что одно из слов слишком короткое...
Вот и решил тему создать.

Задание такое:
Создать окно в рамке на фоне, заполненном псевдографическим символом #178 зеленого цвета, с текстом из файла. По клавишам управления курсором выполнять скроллинг текста в окне на одну строку вверх или вниз.

пара вопросов:
как окно создать - понятно...
Фон... Тут нужно использовать процедуру TextBackground? Но ведь тогда зеленый фон будет только там, где есть текст, верно? Или так и надо? Или закрасить все окно прямоугольником, а потом, в графическом режиме выводить текст?
Как сделать рамку? blink.gif
Скроллинг я думаю организовать так:
Вывести в окошко текст c k=1 строки по k+n (n - количество строк, умещающееся в окне),потом, если нажата клавиша вниз, то окошко очистить и вывести текст с k=k+1 строки по k+n, если нажата клавиша вверх, то окошко очистить и вывести текст с k=k-1 строки по k+n. Это нормально? или стоит сделать как-то по-другому?

Был бы благодарен за ответы! smile.gif

Автор: Bill Gates 12.06.2006 20:37

Цитата
Фон... Тут нужно использовать процедуру TextBackground? Но ведь тогда зеленый фон будет только там, где есть текст, верно? Или так и надо? Или закрасить все окно прямоугольником, а потом, в графическом режиме выводить текст?

А не проще установить TextBackground, потом Window(x1,y1,x2,y2) - прямоугольник и сделать ClrScr? smile.gif

Автор: volvo 12.06.2006 20:58

Unknown, ты для себя-то реши, тебе модуль CRT или

Цитата
в графическом режиме выводить текст
?

Автор: Unknown 12.06.2006 21:13

volvo, ок, значит прямоугольник отпадает smile.gif

Меня вот больше всего рамка интересует... как ее сделать?

Автор: volvo 12.06.2006 21:19

Рамку? Отчерчивать вручную символами (#179 '|', #196 '-', и угловые #192, #217, #218, #191)...

А насчет скроллинга - загляни сюда, запусти программу:
http://forum.pascal.net.ru/index.php?s=&showtopic=10233&view=findpost&p=67757

Автор: Bill Gates 12.06.2006 21:49

Рамка -

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;

Автор: skAmZ 12.06.2006 22:07

Не повериш у меня было такое же задание)) Вот прога, счение из файла идет c:\1.txt, хочеш из другой папки измени путь. Рамки нет.


Прикрепленные файлы
Прикрепленный файл  Lab_12.pas ( 968 байт ) Кол-во скачиваний: 300

Автор: volvo 12.06.2006 22:09

skAmZ, я бы этот БРЕД просто постеснялся выкладывать... dry.gif

Тем более, что по заданию

Цитата
Создать окно в рамке на фоне, заполненном псевдографическим символом #178
, у тебя рамки нет... Извини, но вот это:
uses crt;
begin
end.

тоже ПОЧТИ то, что автору нужно. Подумаешь, кое-что добавить придется...

Автор: skAmZ 12.06.2006 22:15

Тут база. Что рамки нет я сказал. Ракму в ручную добавить не проблема.

"БРЕД" - не понял, это ты к чему. Прога работает!)))

Автор: Unknown 13.06.2006 1:23

Всем большое спасибо! Вроде бы что-то получилось:

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.


Не понял, правда, что с фоном делать - оставил просто зеленый цвет, а вообще псевдографический символ #178 - это что-то типа ??

Автор: Malice 13.06.2006 2:39

Цитата(Unknown @ 12.06.2006 22:23) *

Не понял, правда, что с фоном делать - оставил просто зеленый цвет, а вообще псевдографический символ #178 - это что-то типа ??

Фон тебе надо заполнять этим символом, на что он похож - посмотришь, когда заполнишь smile.gif А вообще - тема такая уже была,http://forum.pascal.net.ru/index.php?s=&showtopic=3743&view=findpost&p=33761, как там было сделано заполнение (хотя, думаю, переделать будет не просто).
ps хотя нет, тема немного другая, но очень похожая.

Автор: Unknown 13.06.2006 3:03

Malice, спасибо большое!
Я, оказывается, неправильно понял задание про фон - думал, что текст должен выводиться на фоне этих самых символов, а оказалось - окно на этом фоне! lol.gif
И еще раз всем большое спасибо!

Автор: Unknown 13.06.2006 20:11

Вот, если кому надо, - переделал:

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.