МОДУЛЬ GRAPH
Графическая Библиотека для TMT Pascal v3.50SP2
Часть 8
Copyright (c) 1997,98 TMT Development Corp.
All Rights Reserved
Если вы заметили в документе
опечатки или неточности перевода,
просьба сообщить о них!
Перевод на русский язык и оформление:
Валерий Вотинцев
К Содержанию
Процедуры и Функции
SetScreenStart (процедура)
-
Задает стартовый адрес на логической странице,
начиная с которого изображение выводится на экран.
Sets the CRTC display starting address to the specified value.
Объявление:
procedure SetScreenStart (X,Y: DWord; WaitForRetrace: Boolean);
-
Пояснения:
-
Эта процедура задает координаты пиксела (X,Y) на логической странице, который
будет выведен на экран в качестве левого верхнего пиксела.
Эту процедуру Вы можете использовать для выполнения аппаратного скроллинга
и панорамирования изображения, размеры которого превышают физические размеры
экрана.
-
Кроме того, ее можно использовать для быстрого переключения между двум
экранами для двойного буферирования анимационных эффектов.
(Более подробную информацию можно найти в VBE Core Standard).
Если параметр WaitForRetrace установлен в True, то перед переключением адреса
процедура будет ожидать обратного вертикального хода луча. В противном
случае синхронизация не производится. Такое поведение процедуры гарантировано
только при наличии VBE 2.0. Если установленная видео-карта поддерживает
только VBE 1.2, то нет никаких гарантий, что синхронизация будет выполнена.
SetSVGAMode (процедура)
-
Устанавливает SVGA видео режим с заданным разрешением и количеством цветов.
Объявление:
procedure SetSVGAMode (XRes, YRes, BPP, VMode: Word);
-
Пояснения:
-
Параметры XRes и YRes задают требуемое разрешение;
Параметр BPP определяет "глубину цвета", т.е. количество бит на 1 пиксел
и должен иметь значение [8,15,16,24,32].
Параметр VMode может принимать следующие значения в дипазоне [1..3]:
Константа | Значение | Пояснение |
LFBorBanked | 0 | Установить режим LFB или с переключением банков |
BankedOnly | 1 | Установить режим только с переключением банков |
LFBOnly | 2 | Установить только LFB режим |
Так, следующий пример:
SetSVGAMode(640,480,8,LfbOrBanked);
-
приведет к установке SVGA режима с разрешение 640x480, 8 бит на пиксел
(т.е. всего 256 цветов). Если режим LFB поддерживается, то он будет
установлен; если же нет - то будет установлен режим переключения банков.
SetTextJustify (процедура)
-
Устанавливает режим выравнивания текста для процедур OutText и OutTextXY.
Объявление:
procedure SetTextJustify(Horiz, Vert: DWord);
-
Пояснения:
-
Процедура SetTextJustify устанавливает параметры выравнивания текста
по горизонтали (параметр Horiz) и по вертикали (параметр Vert) относительно
текущего указателя или указанной точки.
Рассмотрим следующий пример:
SetTextJustify(CenterText, CenterText);
OutTextXY(100, 100, 'ABC');
-
В данном случае текстовая строка "ABC" будет центрирована по горизонтали и
вертикали относительно точки (100, 100), т.е. эта точка будет находитьс
точно в середине буквы "B".
-
По умолчанию выравнивание текста происходит в соответствии с вызовом
SetTextJustify(LeftText, TopText).
-
В случае задания недопустимых параметров выравнивания для SetTextJustify,
в переменной GraphResult будет возвращено значение кода ошибки grError,
и параметры выравнивания не изменятся.
SetTextStyle (процедура)
-
Задает стиль вывода текста в графическом режиме.
Объявление:
procedure SetFontStyle(Font, Direction: DWord);
SetTranspMode (процедура)
-
Устанавливает или сбрасывает режим прозрачности при выводе изображений.
Объявление:
procedure SetTranspMode(Mode: Boolean; Color: DWord);
-
Пояснения:
-
Модуль TMT Graph поддерживает прозрачность при выводе изображений (BitMaps).
Если параметр Mode имеет значение True, то режими прозрачности используется.
При этом параметр Color определяет, какой именно цвет в изображении
является прозрачным. При выводе изображения на экран будут отображены
только те пикселы, цвет которых отличается от Color; все же остальные
пикселы, имеющие цвет Color, будут проигнорированы при выводе.
-
Такая технология вывода изображений очень удобна для программирования игр.
Работа с прозрачными изображениями поддерживается в любом графическом режиме
(MCGA/VGA, SVGA 256, 32K, 64K, 16M и 16M+Alpha цветов, как с LFB, так и с
переключением банков)!
Действие процедуры SetTranspMode оказывает влияние только на вывод
изображений с помощью следующих процедур: PutPixel, PutSprite и PutImage.
SetViewPort (процедура)
-
Устанавливает область видимости, или, другими словами, окно для вывода
графики.
Объявление:
procedure SetViewPort(x1, y1, x2, y2: LongInt; Clip: Boolean);
-
Пояснения:
-
(X1,Y1) задают левый верхний угол окна, а (X2, Y2) - нижний правый угол.
После задания окна, адресация точек в нем осуществляется с нуля, т.е.
левый верхний угол внутри окна имеет координаты (0, 0).
Логический параметр Clip определяет, будет ли использоваться в данном окне
отсечение выводимых изображений, если они выходят за границы данного окна.
Чтобы установить окно целиком на все изображение, следует выполнить
SetViewPort(0, 0, GetMaxX, GetMaxY, True);
-
Если координаты окна заданы неверно, т.е. (X1 >= X2) или (Y1 >= Y2), то
в переменной GraphResult будет возвращен код ошибки grError, и текущее
окно не будет изменено. Модуль TMT Garph позволяет назначать окно
(ViewPort) даже за пределами экрана!
Все графические команды (например, GetX, OutText, Rectangle, MoveTo, и т.д.)
осуществляют свой вывод именно в установленное окно (viewport).
Если параметр Clip установлен в True, то все, что выходит за границы окна,
будет отсечено. Однако, текущий указатель, естественно, никогда не
отсекается. Рассмотрим следующий пример:
SetViewPort(10, 10, 20, 20, ClipOn);
Line(0, 5, 15, 5);
-
Здесь выводимая линия не будет полностью отрисована, поскольку часть ее
выходит за пределы окна, и поэтому будет отсечена. Если бы режим
отсечения не был задан, то линия начиналась бы в точке с абсолютными
координатами (10,15) и заканчивалась в точке с абсолютными координатами
(25, 15). Но, поскольку отсечение включено, будет отрисована только часть
линии, а именно от точки с абсолютными координатами (10, 15) до точки
с абсолютными координатами (20, 15).
Обращение к процедурам SetSVGAMode, GraphDefaults, и SetGraphMode сбрасывает
окно до размеров полного графического экрана.
Параметры текущего окна можно получить посредством вызова процедуры
GetViewSettings, которая возвращает структуру типа ViewPortType.
После вызова SetViewPort текущий указатель сбрасывается в (0, 0).
SetVirtualMode (процедура)
-
Устанавливает виртуальный графический режим.
Объявление:
procedure SetVirtualMode (BuffAddr: Pointer)
-
Пояснения:
-
Эта процедура переадресует все графические операции непосредственно в
виртуальный видео буфер в памяти, на который ссылается указатель BuffAddr.
Прежде, чем выводить что-либо в виртуальный буфер, необходимо выделить
под него память с помощью процедуры GetMem. Для определения, какое
количество памяти потребуется для виртуального видео буфера, используйте
функцию GetPageSize.
-
Процедура SetVirtualMode не поддерживается в бесплатной версии компилятора
TMT Pascal.
См. также: SetNormalMode, FlipToScreen и FlipToMemory.
SetVisualPage (процедура)
-
Делает указанную графическую страницу видимой.
Объявление:
procedure SetVisualPage(Page: DWord; WaitForRetrace: Boolean);
-
Пояснения:
-
После вызова процедуры становится видимой графическая страница с
указанным номером.
Несколько графических страниц могут поддерживаться только в SVGA графических
режимах. При использовании нескольких графических страниц программа имеет
возможность осуществлять прямой графический вывод на невидимую в данный
момент страницу, а затем быстро переключиться, сделав эту страницу видимой
с помощью процедуры SetVisualPage. Эта технология особенно полезна дл
анимации изображений.
Если параметр WaitForRetrace установлен в True, переключение будет
произведено только в момент вертикального обратного хода луча.
Флаг ожидания вертикального обратного хода луча входит в спецификацию
VBE начиная с версии 2.0, поэтому, если Ваша видео-карта поддерживает
только VBE 1.2, то нет никакой гарантии, что будет производитьс
такая синхронизация.
SetWriteMode (процедура)
-
Устанавливает режим записи при рисовании линии.
Объявление:
procedure SetWriteMode(WriteMode: DWord);
-
Пояснения:
-
Существует два режима записи при рисовании линии: простое копирование
без учета того, что было раньше изображено под линией (CopyPut), и вывод с
учетом изображения, перекрываемого линией (XORPut).
-
При использовании метода CopyPut для вывода пикселов используетс
ассемблерная инструкция MOV, просто перезаписывающая то, что было ранее
на экране. При использовании метода XORPut вывод пикселов осуществляетс
с помощью инструкции XOR, которая позволяет комбинировать точкт линии с
уже имеющимся изображением.
-
Заметим, что если дважды вывести линию в режиме XOR, то линия сотретс
и восстановится предыдущее изображение под линией.
Процедура SetWriteMode оказывает воздействие на результат вывода следующих
процедур: DrawPoly, Line, Spline, LineRel, LineTo, Rectangle, Circle,
Ellipse, Bar3D, Putpixel, PutSprite и PutImage.
Spline (процедура)
-
Рисует сплайн.
Объявление:
Spline(Nodes: Byte; Points: array of PointType);
-
Пояснения:
-
Процедура формирует плавную кривую, проходящую через заданную
последовательность точек. Параметр Nodes задает количество точек в массиве
Points. Каждая точка задается парой координат X и Y типа LongInt.
Для настройки плавности рисуемой сплайн-кривой используется процедура
SetSplineSteps.
Stretch (процедура)
-
Растягивает содержимое экрана по вертикали в Param раз.
Объявление:
procedure Stretch (Param: Byte);
TextHeight (функция)
-
Возвращает высоту текста в пикселах.
Объявление:
function TextHeight(TextString: string): DWord;
-
Пояснения:
-
Функция использует высоту текущего фонта для вычисления высоты текстовой
строки в пикселах. Эту возможность удобно использовать для настройки
расстояний между линиями, вычисления высоты окна, содержащего текст,
установления размера текстового заголовка при выводе его внутри
прямоугольника или определенной области, и т.д.
Например, если используется фонт 8x8 точек (устанавливается процедурой
SetTextStyle), то высота текстовой строки будет равна 8 пикселов.
Рекомендуем не вычислять высоту строки вручную, а использовать для этого
функцию TextHeight. В этом случае не потребуется изменять исходный код
программы при использовании различных фонтов.
TextWidth (функция)
-
Возвращает длину строки текста в пикселах.
-
Объявление:
function TextWidth(TextString: string): DWord;
-
Пояснения:
-
Функция использует ширину текущего фонта и количество символов в строке дл
вычисления длины текстовой строки в пикселах. Эту возможность удобно
использовать для вычисления ширины окна, содержащего текст, установлени
размера текстового заголовка при выводе его внутри прямоугольника или
определенной области, и т.д.
Например, при использовании фонта 8x8 точек (установленного процедурой
SetTextStyle), длина строки, содержащей 3 символа "TMT", будет равна 24
пиксела.
Рекомендуем не вычислять длину строки вручную, а использовать для этого
функцию TextWidth. В этом случае не потребуется изменять исходный код
программы при использовании различных фонтов.
TotalVbeMemory (функция)
-
Возвращает количество установленной видео-памяти в байтах.
Объявление:
function TotalVbeMemory: DWord;
-
Пояснения:
-
Если VESA VBE 1.1+ не поддерживается, то функция вернет ноль.
TotalVbeModes (функция)
-
Возвращает общее количество поддерживаемых VESA режимов.
Объявление:
function TotalVbeModes: Word;
-
Пояснения:
-
Для получения списка всех поддерживаемых VESA режимов можно воспользоватьс
функцией GetVbeModesList.
Triangle (процедура)
-
Рисует треугольник.
Объявление:
procedure Triangle (X1,Y1,X2,Y2,X3,Y3: LongInt);
-
Пояснения:
-
(X1,Y1), (X2,Y2), (X3,Y3) - координаты вершин треугольника.
|