Работа с текстом в графическом режиме
Для вывода на экран текста в графическом режиме используются следующие процедуры:
OutText(S);- вывод строки S(типа string) в текущей позиции курсора.
OutTextXY(x,y,S); - вывод строки S в позиции с координатами (x, y).
Строку S можно определять явно в виде символов, заключенных в апострофы, например, OutText('Sample 1');, или как переменную (константу) типа string. Если требуется вывести значение переменной числового типа, то необходимо приме-нить процедуру ее преобразования в строковый тип. Например: Str(x:10:5,S);- определяем переменную "S" (типа string), полученную преобразованием переменной "x" (вещественного типа) по указанному формату.
Перечислять несколько переменных через запятые (подобно параметрам функций write и writeln) в графических функциях вывода текста не допускается. При выводе нескольких строковых переменных они соединяются знаком "+" , например: OutText('x='+ S);
Для установки стиля вывода текстаиспользуется процедура
SetTextStyle(F, D, Z);
где F - номер шрифта, D - направление вывода надписи, Z - увеличение размера относительно базового варианта. Параметры F, D, Z - типа Word.
Шрифт в графическом режиме может создаваться двумя методами. В первом типе шрифта - матричном, берется стандартный шрифтовой набор BIOS ПК, где каждому символу соответствует матрица 8*8 пикселов. Матричный шрифт используется по умолчанию. Изменение размера матричного шрифта производится увеличением исходной матрицы в N-раз: 8N*8N пикселов. При увеличении размера явно проявляется "грубость" матричного шрифта.
Второй тип шрифтов - векторный(штриховой). При этом буквы рисуются как совокупность отрезков, соединяющих узловые точки букв. Качество в этом случае от размера не зависит. Однако вывод текста векторными шрифтами более медленный, чем матричным.
В стандартном наборе BGI определено:
F = 0(DefaultFont) - 8х8 пикселов - матричный шрифт,
векторные шрифты:
F = 1(TriplexFont) - триплекс (полужирный),
F = 2(SmallFont) - уменьшенный,
F = 3(SansSerifFont) - прямой (книжный),
F = 4(GothicFont) - готический.
Направление шрифта: D= 0- по горизонтали слева направо,
D= 1- по вертикали снизу вверх, символы повернуты на 900.
Увеличение размера Z варьируется от 1 до 31 для матричного шрифта и от 1 до 10 для векторных шрифтов. Причембазовый размерсоответствует для матричного шрифта Z= 1, для векторного шрифта Z= 4.При Z= 0 базовый размер устанавливается по умолчанию.
Для векторного шрифта, можно изменить его пропорцииотносительно базового размера процедурой
SetUserCharSize(XN, X, YN, Y);
При этом (XN/X) - множитель для изменения ширины символов, (YN/Y) - множитель для изменения высоты символов. Параметры XN, X, YN, Y - типа Word.
Текст можно выравниватьотносительно позиции его вывода с помощью процедуры
(0,2) (1,2) (2,2)
SetTextJustify(H, V);* * *
(0,1)*_ЦЕНТРИРУЕМЫЙ ТЕКСТ*(2,1)
* * *
Выравнивание по горизонтали:(0,0) (1,0) (2,0)
H = 0 - текст справа от позиции вывода, В скобках указаны значения H, V.
H = 1 - центрирование текста,
H = 2 - текст слева от позиции вывода.
Выравнивание по вертикали:
V = 0- текст выше позиции вывода,
V = 1- центрирование текста,
V = 2- текст ниже позиции вывода.
По умолчанию установлено H= 0, V= 2.
Длину строки S(в пикселах) можно определить функциейTextWidth(S);
Высота строки S определяется функцией TextHeight(S);
Если строка не помещается в области экрана, то в случае матричного шрифта эта строка не выводится, а для векторных шрифтов часть строки отсекается.
Цвет текстав графике устанавливается процедурой SetColor(N); где N-номер цвета.
{ -------- Пример программы, демонстрирующей различные шрифты: --------- }
uses Graph;
var Gd, Gm, k, X, Y, Size: integer; S: string;
Begin
Gd:= Detect; InitGraph(Gd, Gm, 'c:\tp7\bgi');
X:= 0; Y:= 0;{ начальные координаты вывода текста }
for Size:= 1 to 10 do begin k:= 0;{ перебор размеров шрифта }
SetTextStyle(k,0,Size); Str(Size,S);{ пишем матричным шрифтом }
OutTextXY(X, Y, 'Size=' + S);
Y:= Y + TextHeight('S') + 1 { смещение по "Y" на высоту буквы "S" }
end;
Readln; ClearDevice;
SetTextJustify(1,2);{ выравнивание по центру }
for k:= 1 to 4 do begin{ пишем векторными шрифтами }
Y:= 0; SetColor(k+8);
for Size:=1 to 10 do begin{ перебор размеров шрифта }
SetTextStyle(k, 0, Size); Str(Size, S);
OutTextXY( GetmaxX div 2, Y, 'Size='+S);
Y:= Y + TextHeight('S') + 1;
end;
Readln; ClearDevice
End; CloseGraph
End.
Практическое задание N 1. 62
1. Сопоставить матричный шрифт с векторными шрифтами выводом строки "MATRIX" (матричным шрифтом) и строки с названием векторного шрифта (например, "GOTHIC" - при F=4) всеми доступными размерами. Номер размера также должен выводиться.
2. Вывести разными шрифтами и размерами свое имя с указанием значений параметров "F" и "Z".
Примечание:доступный размер определяется в программе из условия размещения строки с текстом на экране.
3/4. Выполнить п. 1/2 размещая надпись с базовым размером шрифта в рамке. Изменять позиции вывода (выравнивания) строки текста. Изменять пропорции шрифта.
5. Вывести в графическом режиме таблицу функций X, SIN(X), COS(X) для X=0, . . . , PI с шагом PI/10. Таблица должна иметь заголовок и располагаться в рамке. При этом нужно рассчитать размеры шрифта по результатам, возвращаемым функциями TextWidth и TextHeight так, чтобы таблица заняла максимальную область экрана.
6. Выполнить п. 5 для Х= -Pi до Pi с шагом Pi/5.
7. Создать аналог электронного секундомера, выводящего цифры (от 0 до 59) матричным шрифтом большого размера в центре прямоугольника. После задержки текущая цифра перерисовывается цветом фона и подается звуковой сигнал. Секундомер запускается нажатием клавиши Enter.
8. Выполнить п. 7 для векторного шрифта с использованием режима XorPut.
Мультипликация
Принцип мультипликации состоит в быстром воспроизведении на экране заранее подготовленных рисунков (картинок). Поскольку зрительные нервы не фиксируют информацию продолжительностью < 1/6 сек., то, быстрая смена кадра (изображения на экране) не замечается человеком.
Мультипликация в графическом режиме обеспечивается возможностью запоминать (хранить в ОЗУ) прямоугольные массивы пикселов. Эти массивы можно в дальнейшем выводить в любом месте экрана в нужное время.
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|