Зображення текстової інформації у графічному режимі

Текст у графічному режимі виводиться з використанням шрифтів, що зберігаються у файлах із розширенням chr. Параметрами шрифтів визначається розмір літер, напрям та спосіб вирівнювання тексту тощо. Значенням цих параметрів зіставлені такі константи:

Const {типи шрифтів}

DefaultFont = 0; TriplexFont = 1; SmallFont = 2; SansSerifFont = 3; GothicFont = 4;

Const {напряи тексту}

HorizDir=0; {зліва направо}

VertDir = 1; {знизу догори }

Const {вирівнювання тексту}

LeftText =0; CenterText = l; RightText=2; {горизонтальне}

BottomText = 0; CenterText = 1; TopText = 2; {вертикальне}

Виведення тексту виконують процедури OutText і OutTextXY.

Анімаційні ефекти

Під час розробки анімаційних програм потрібно створювати ефект пересування графічних об'єктів. Анімаційний ефект можна досягти за допомогою копіювання зображень в оперативну пам'ять і виведення на екран їх копій у нових графічних координатах. Оскільки копія зображення зберігається в оперативній пам'яті, можливе її багаторазове виведення.

Є спеціальні процедури і функції, які використовують для створення анімаційних ефектів. Процедура GetImage (xl. yl. х2, у2: Integer; var BitMap) зберігає в пам'яті зображення, оточене прямокутником, лівим верхнім кутом якого є точка (x1, y1), а правим нижнім — точка (х2, у2). Параметр BitMap — це динамічна змінна, що в ній зберігатиметься зображення. Покажчик на змінну BitMap, як правило, нетипізований. На екран зображення виводиться за допомогою процедури

PutImage(x, у: Integer; var BitMap; BitBlt: Ward). Координатами лівої верхньої точки зображення є значення параметрів х і у. Параметр ВіtBlt визначає спосіб взаємодії нової копії зображення із зображенням, що вже є на екрані. Значенням параметра BitBlt є одна із таких констант:

const

NormalPut = 0; {Заміна наявного зображення на копію}

XorPut =1; {Операція заключного "або"}

0rPut = 2; {Об’єднувальне "або"}

AndPut = З; {Логічне, "і"}

NotPut = 4; {Інверсія зображення}

Логічні операції над зображенням дають такі результати. У випадку використання константи NormalPut зображення на екрані знищується і на цьому місці відображається копія з оперативної пам'яті. В разі вибору константи Not Put буде виведено копію зображення в інверсному коді. Використання константи XorPut дає можливість видаляти зображення в тих точках екрана, де розміщено його оригінал.

Приклад використання процедури GetImage та PutImage.

Фрагмент програми, що імітує рух місяця на зоряному небі. Коли зображення місяця сягає межі екрана, напрям його руху змінюється

Program animas;

uses crt,graph;

var

dr,m:integer; {графічний драйвер і режим }

x, y:integer; {координати об'єкта під час руху}

dx, dy:integer; {приріст координат }

prt:pointer; {покажчик на область пам'яті де зберігатиметься зображення }

size:integer; {розмір необхідної для збереження зображення пам'яті }

leftX,leftY,rightX,rightY:integer; , {координати лівого верхнього і правого нижнього кутів прямокутника, в який вписано зображення }

i:integer; {параметр циклу }

{========Збереження зображення у динамічній пам’яті ======}

procedure SaveClip;

begin

leftX:=445; {координати прямокутника}

leftY:=45; {у який вписано місяць }

rightX:=505;

rightY:=155;

size:=imagesize(leftX,LeftY,rightX,rightY);

getmem(prt,size); {видiлити пам'ять }

getimage(leftX,LeftY,rightX,rightY,prt^); {виділити пам'ять }

{зберегти зображення }

putimage(leftX,leftY,prt^,xorput); {приховати зображення }

end;

{==========Рух місяця ===========}

procedure Move;

begin

x:=leftX; y:=leftY; {стартовi координати}

dx:=10; dy:=10; {приріст координат}

repeat {зсув зображення}

x:=x+dx; {зміна координат місяця}

y:=y+dy;

putimage(x,y,prt^,xorput); {зобразити фігуру в нових координатах}

delay(2000); {затримати рух}

putimage(x,y,prt^,xorput); {сховати фігуру в старих координатах}

if (x>640) or (x<0) then dx:=-dx {якщо фігура сягнула межi екрана,}

else {змінити напрям її руху}

if (y<0) or (y>480) then dy:=-dy;

until keypressed;

end;