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

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

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

> создание окна со скроллингом, модуль CRT
Unknown
сообщение 12.06.2006 16:02
Сообщение #1


Пионер
**

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

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


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

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

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

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


--------------------
go ask Alice
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 12)
Bill Gates
сообщение 12.06.2006 16:37
Сообщение #2


Новичок
*

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

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


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

А не проще установить TextBackground, потом Window(x1,y1,x2,y2) - прямоугольник и сделать ClrScr? smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.06.2006 16:58
Сообщение #3


Гость






Unknown, ты для себя-то реши, тебе модуль CRT или
Цитата
в графическом режиме выводить текст
?
 К началу страницы 
+ Ответить 
Unknown
сообщение 12.06.2006 17:13
Сообщение #4


Пионер
**

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

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


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

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


--------------------
go ask Alice
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.06.2006 17:19
Сообщение #5


Гость






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

А насчет скроллинга - загляни сюда, запусти программу:
Меню со скроллингом
 К началу страницы 
+ Ответить 
Bill Gates
сообщение 12.06.2006 17:49
Сообщение #6


Новичок
*

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

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


Рамка -
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;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
skAmZ
сообщение 12.06.2006 18:07
Сообщение #7


Новичок
*

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

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


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

Сообщение отредактировано: skAmZ - 12.06.2006 18:08


Прикрепленные файлы
Прикрепленный файл  Lab_12.pas ( 968 байт ) Кол-во скачиваний: 228
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.06.2006 18:09
Сообщение #8


Гость






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

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

тоже ПОЧТИ то, что автору нужно. Подумаешь, кое-что добавить придется...
 К началу страницы 
+ Ответить 
skAmZ
сообщение 12.06.2006 18:15
Сообщение #9


Новичок
*

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

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


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

"БРЕД" - не понял, это ты к чему. Прога работает!)))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unknown
сообщение 12.06.2006 21:23
Сообщение #10


Пионер
**

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

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


Всем большое спасибо! Вроде бы что-то получилось:
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 - это что-то типа ??


--------------------
go ask Alice
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Malice
сообщение 12.06.2006 22:39
Сообщение #11


Профи
****

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

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


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

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

Фон тебе надо заполнять этим символом, на что он похож - посмотришь, когда заполнишь smile.gif А вообще - тема такая уже была, посмотри , как там было сделано заполнение (хотя, думаю, переделать будет не просто).
ps хотя нет, тема немного другая, но очень похожая.

Сообщение отредактировано: Malice - 12.06.2006 22:43
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unknown
сообщение 12.06.2006 23:03
Сообщение #12


Пионер
**

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

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


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


--------------------
go ask Alice
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unknown
сообщение 13.06.2006 16:11
Сообщение #13


Пионер
**

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

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


Вот, если кому надо, - переделал:
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.


--------------------
go ask Alice
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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