Скачиваний:
201
Добавлен:
17.06.2016
Размер:
2.69 Mб
Скачать

Экраны и поля вывода.

В зависимости от графического адаптера ваша система имеет буфер раз-

мером от 1 до 8 экранов - страниц, которые являются областями памяти, где

хранится полный образ экрана. Вы можете определять, какая именно страница

- экран будет активизирована в настоящее время (куда графические предика-

ты выводят свою информацию) с помощью предиката setactivepage и какую

именно страницу - экран отображать в настоящее время на экране с помощью

предиката setvisualpage.

Если вы находитесь в графическом режиме, то вы можете определить по-

ле вывода (графическое окно или прямоугольный "виртуальный экран") на эк-

ране с помощью предиката setviewport. Положение поля вывода определяется

в терминах абсолютных экранных координат. Этим же предикатом определяет-

ся, включается или нет удаление линий, выходящих за границы поля вывода.

Можно очищать поле вывода с помощью предиката clearviewport. Чтобы опре-

делить текущее положение поля вывода и режим удаления, можно исполнить

предикат getviewsettings. Вы можете также очистить весь экран, исполнив

cleardevice. Этот предикат очищает весь экран, устанавливает текущее по-

ложение в начало координат и оставляет все остальные параметры графичес-

кой системы без изменения.

Предикаты.

В этом разделе мы дадим краткое описание всех предикатов BGI, ис-

пользуемых для управления экранами и полями вывода. Более полное описание

находится в разделе "Стандартные Предикаты" в "Справочном Руководстве по

Турбо Прологу".

Setviewport/5

setviewport устанавливает новое поле вывода для вывода графической

информации.

setviewport(Left, Top, Right, Bottom, Clip) /*(i,i,i,i,i)*/

(integer, integer, integer, integer, integer)

Левая верхняя и правая нижняя угловые точки поля вывода задаются в

абсолютных экранных координатах парами (Left,Top) и (Right, Bottom), те-

кущая позиция (CP) устанавливается в позицию (0,0) поля вывода. Параметр

Clip определяет удаление всех линий, выходящих за границы текущего поля

вывода. Если Clip не равен нулю при вызове setviewport, то все рисунки

будут ограничиваться границами текущего поля вывода.

Getviesettings/5

getviesettings возвращает информацию о текущем поле вывода.

getviesettings(Left,Top,Right,Bottom,ClipFlag) /*(o,o,o,o,o)*/

(integer, integer, integer, integer, integer)

setactivepage/1

setactivepage активизирует страницу - экран для графического вывода.

setactivepage(Page) /*(i)*/

(integer)

setvisualpage/1

setvisualpage устанавливает номер графической страницы, которую не-

обходимо отобразить на экране дисплея.

setvisualpage(Page) /*(i)*/

(integer)

clearviewport/0 и cleardevice/0

clearviewport очищает текущее поле вывода и перемещает текущую пози-

цию (ТП) в положение (0,0) относительно поля. cleardevice очищает весь

экран и перемещает текущую позицию в положение (0,0).

Пример

/* Program CH17EX06.PRO */

include "GRAPDECL.PRO"

predicates

makeViewPort

goal

initGraph(G_Driver, G_Mode, New_Driver, New_Mode, ""),

makeViewPort,

closegraph().

clauses

makeViewPort :-

detectGraph(_, G_Mode),

getMaxX(MaxX), getMaxY(MaxY),

setViewPort(0, 0, MaxX, MaxY, 1),

clearViewPort,

writef("Default Mode is %, resolution is % by %",

G_Mode, MaxX, MaxY), nl,

write("Press key"), readchar(_), nl, fail.

makeViewPort :-

detectGraph(G_Driver, _),

getModeRange(G_Driver, Low, _),

setGraphMode(Low),

getMaxX(MaxX), getMaxY(MaxY),

setViewPort(0, 0, MaxX, MaxY, 1),

clearViewPort,

writef("Default Mode is %, resolution is % by %",

G_Mode, MaxX, MaxY), nl,

write("Press key"), readchar(_), nl, fail.

Соседние файлы в папке Документация