Вывод текста в режиме 256 цветов
Модуль вывода изображения на экран в режиме 256 цветов содержит следующее:
процедуру задания параметров вывода текста SetTextParm, с помощью которой можно установить цвет символов, цвет фона под символами
(если он будет отображаться), а также способ вывода текста (с прозрачным или с непрозрачным фоном);
дополнительную процедуру запроса текущих параметров текста GetTextParm. В обеих приведенных выше процедурах используются номера цветов, соответствующие стандартной палитре;
процедуру вывода текстовой строки в определенное место экрана PutText. Даются координаты верхнего левого угла прямоугольника, в котором будет выведена первая буква, т. е. так же, как и для спрайтов. Процедура не проверяет вероятность выхода за пределы экрана и не производит перенос на следующую строку, — забота об этом лежит на программисте;
процедуру вывода отдельного символа PutChar, которая используется процедурой PutText, но имеет и отдельный вход в интерфейсной части модуля;
процедуру вывода точки на экран PutPixel и функцию GetPixel, возвращающую цвет запрошенной точки. Первая используется, в свою очередь, процедурой PutChar, а вторая введена лишь для большей полноты картины. Если эти процедуры необходимы, то следует скопировать их заголовки в интерфейсную часть модуля (изначально они отсутствуют). Но вряд ли это целесообразно, поскольку поточечный вывод изображения происходит очень медленно, а в модуле вывода текста используется лишь потому, что сам текст занимает обычно лишь очень небольшую долю экрана и, кроме того, не перерисовывается на каждом кадре.
Как уже было сказано, буквы выводятся по одной точке, каждой из которых на экране отводится 1 байт, а вот в шрифтах они лежат гораздо компактнее: на одну точку приходится один бит. Весь горизонтальный ряд точек помещается в одном байте, а вся буква — в восьми. При отрисовке буквы перед записью байта в видеопамять проверяется, что находится в нужном бите таблицы шрифтов: 0 или 1. В нашем примере будем выводить надписи в каждом кадре, что более наглядно.
Чтобы посмотреть, как работает описанный модуль, следует включить его имя в директиву uses, описать дополнительную типизированную константу TextColor : byte = 0 и вставить фрагмент, приведенный в листинге 2, между вызовами процедуры отрисовки спрайта PutSprite и процедуры ожидания луча обратного хода WaitVerticalRetrace. На экране должна появиться переливающаяся разными цветами надпись, одна половина которой отображается на непрозрачном фоне, а другая — на прозрачном.
Однако за простоту и нетребовательность к ресурсам приходится платить: предлагаемый способ вывода текста не обладает свойствами спрайта и портит под ним фон. Так что если текст требуется часто перерисовывать, то следует либо самому заботиться о сохранении фона, либо задать его непрозрачным.
листинг 1
interface
{ установка параметров вывода текста }
procedure SetTextParm(color,bkcolor,typetext:byte);
{ color - цвет текста }
{ bkcolor - цвет фона }
{ typetext = 0 - прозрачный фон }
{ typetext = 1 - непрозрачный фон }
{ запрос текущих параметров }
procedure GetTextParm(var color,bkcolor,typetext:byte);
{вывод текста по координатам x,y (верхний левый угол)}
procedure PutText(x,y:word;text:string);
{вывод символа по координатам x,y (верхний левый угол)}
procedure PutChar(x,y:word;chr:char);