Помощь - Поиск - Пользователи - Календарь
Полная версия: создание окна со скроллингом
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Unknown
В общем полазил по ФАК'у - ничего по модулю 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
Цитата
Фон... Тут нужно использовать процедуру TextBackground? Но ведь тогда зеленый фон будет только там, где есть текст, верно? Или так и надо? Или закрасить все окно прямоугольником, а потом, в графическом режиме выводить текст?

А не проще установить TextBackground, потом Window(x1,y1,x2,y2) - прямоугольник и сделать ClrScr? smile.gif
volvo
Unknown, ты для себя-то реши, тебе модуль CRT или
Цитата
в графическом режиме выводить текст
?
Unknown
volvo, ок, значит прямоугольник отпадает smile.gif

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

А насчет скроллинга - загляни сюда, запусти программу:
Меню со скроллингом
Bill Gates
Рамка -
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
Не повериш у меня было такое же задание)) Вот прога, счение из файла идет c:\1.txt, хочеш из другой папки измени путь. Рамки нет.
volvo
skAmZ, я бы этот БРЕД просто постеснялся выкладывать... dry.gif

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

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

"БРЕД" - не понял, это ты к чему. Прога работает!)))
Unknown
Всем большое спасибо! Вроде бы что-то получилось:
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
Цитата(Unknown @ 12.06.2006 22:23) *

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

Фон тебе надо заполнять этим символом, на что он похож - посмотришь, когда заполнишь smile.gif А вообще - тема такая уже была, посмотри , как там было сделано заполнение (хотя, думаю, переделать будет не просто).
ps хотя нет, тема немного другая, но очень похожая.
Unknown
Malice, спасибо большое!
Я, оказывается, неправильно понял задание про фон - думал, что текст должен выводиться на фоне этих самых символов, а оказалось - окно на этом фоне! lol.gif
И еще раз всем большое спасибо!
Unknown
Вот, если кому надо, - переделал:
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.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.