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

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

Форум «Всё о Паскале» _ Теоретические вопросы _ Цвет экрана в текстовом режиме

Автор: inet007 29.02.2004 1:57

Как сделать цвет экрана, ну например, белым в текстовом режиме?

Автор: AlaRic 29.02.2004 2:10

textbackground(15);

Автор: neex 29.02.2004 2:48

Не все так просто, а як же підключеня бібліотеки, і встановлення тексту чорним.

uses crt;
....

begin
...
textbackground(15);
textcolor(0);
...
end.

Автор: AlaRic 29.02.2004 3:09

1 - не думаю что он не догадается про uses crt;
2 - цвет шрифта может быть любым!

Автор: Nemo 29.02.2004 3:20

TextAttr:=$10*BG+T;
Где BG - цвет фона, а Т - текста.

Автор: APAL 1.03.2004 23:03

Цвет фона задается в пределах 0..7
Хотя есть какой-то способ обойти это ограничение... (где-то выставляется флаг об использовании бита)

===============================
Procedure TextBackground(Color : Byte);
Замечания:
Color - целочисленное выражение в диапазоне 0 .. 7, соответствющее одной из первых восьми констант цвета в текстовом режиме. В модуле Crt существует
переменная типа байт - TextAttr, которая используется для хранения текущего
видеоатрибута. TextBackground устанавливает биты 4-6 переменной TextAttr в
Color.
=======================================
Procedure TextColor(Color : Byte);
Замечания:
Параметр Color - целочисленное выражение в диапазоне 0 .. 15,
соответствующий одной из констант цвета текстового режима, определенных в
модуле Crt.

В модуле Crt существует переменная типа байт - TextAttr, которая
используется для хранения текущего видеоатрибута. TextColor устанавливает
биты 0-3 переменной TextAttr в Color. Если Color больше 15, то бит 7 (бит,
определяюший мигание) тоже поднимается.

Автор: inet007 2.03.2004 19:17

Я так и думал, что последует ответ: TextBackground. Однако не всё так просто.
Я имел ввиду не цвет ФОНА текста, а цвет ЭКРАНА, на который выводится текст любого цвета. То есть к примеру также, как в графическом режиме процедура setbkcolor.

Автор: neex 3.03.2004 2:28

Если человек знает что такое uses crt то думаю он знает что такое и textbackground(15);

А цвет можно поменять просто заменив цвет каждого символа :-)

var
i : integer;
c : ^char;
begin
for i:=0 to 80*25-1 do
begin
c := ptr($B800,$0000+2*i+1);
c^ := chr(128);
end
end.


где 128 код цвета символа, в нем содержится информация про цвет фона и цвет символа. 128 - черный текст на белом фоне

Автор: neex 3.03.2004 2:29

И почему форум отступы хавает?

Автор: inet007 3.03.2004 13:43

Молодец neex!. Именно это я и имел в виду. Однако у твоего способа есть один недостаток: он работает только в оконном режиме! В полном экране цвет по прежнему чёрный. Что посоветуешь?? ;)

Автор: APAL 3.03.2004 16:29

Цитата(inet007 @ 3.03.04 6:43)
... один недостаток: он работает только в оконном режиме! В полном экране цвет по прежнему чёрный. Что посоветуешь?? ;)

Разве только в оконном?


ЗЫ: Я к видео-памяти обращался через mem[...]

Автор: neex 4.03.2004 2:46

Цитата(inet007 @ 3.03.04 9:43)
Однако у твоего способа есть один недостаток: он работает только в оконном режиме!

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

У меня работает и в оконном и в неоконном.

Скорее всего у тебя винда или паскаль не такие как у меня.
Просто паскаль написан под МС ДОС, а винда запускает эмулятор ДОСа и в нем запускает Паскаль. И этот эмулятор может неправильно моделировать видеопамять, через которую и меняется цвет экрана. Можна покопатся в настройках эмулятора, но вряд ли это поможет. Также можна попробовать другой паскаль.

А также можно сменить ВИНДУ ;-)

В чистом досе все будет работать нормально.

У меня стоит Borland Pascal 7.0 и Windows XP Pro.

Автор: GLuk 4.03.2004 5:02

Изменяй не память, а палитру:

Порт 3D8h - номер регистра, 3D9h - данные (в формате R-G-B). Затем номер автоматом увеличивается. Не канает через порты - меняй через ф-ии BIOS, по-моему int 10,10..

Автор: trminator 18.03.2004 11:03

Чтобы залить весь экран цветом, после TextBackground мдет ClrScr... или я не в ту степь иду?

Автор: Atos 20.03.2004 10:15

Цитата
Скорее всего у тебя винда или паскаль не такие как у меня.


Действительно, например при WindowsNT нет никакой гарантии, что DOSявые приложения и, в частности, BP7 не будут глючить. Кстати, там и могут возниать проблемы с отображением в полноэкранном режиме. Virtual Pascal вроде не глючит.