Действия со шрифтом
procedure
SetFontColor(color: integer);
Устанавливает цвет шрифта.
function
FontColor: integer;
Возвращает текущий цвет шрифта.
procedure
SetFontSize(sz: integer);
Устанавливает размер шрифта в пунктах.
function
FontSize: integer;
Возвращает текущий размер шрифта в пунктах.
procedure
SetFontName(name: string);
Устанавливает наименование шрифта.
function
FontName: string;
Возвращает текущее наименование шрифта.
По умолчанию установлен шрифт, имеющий
наименование MS Sans Serif
.
Наиболее распространенные шрифты – это Times
,
Arial
и
Courier New
.
Наименование шрифта можно набирать без учета регистра.
procedure
SetFontStyle(fs: integer);
Устанавливает стиль шрифта.
function
FontStyle: integer;
Возвращает текущий стиль шрифта.
Стили шрифта
задаются следующими именованными константами:
fsNormal
–
обычный;
fsBold
–
жирный;
fsItalic
–
наклонный;
fsBoldItalic
–
жирный наклонный;
fsUnderline
–
подчеркнутый;
fsBoldUnderline
– жирный подчеркнутый;
fsItalicUnderline
– наклонный подчеркнутый;
fsBoldItalicUnderline
– жирный наклонный подчеркнутый.
function
TextWidth(s: string): integer;
Возвращает ширину строки s
в пикселях
при текущих настройках шрифта.
function
TextHeight(s: string): integer;
Возвращает высоту строки s
в пикселях
при текущих настройках шрифта.
Действия с рисунками
Работа с рисунками в модуле GraphABC
производится либо с помощью описателей (целых чисел, однозначно
определяющих рисунок), либо с помощью объектов класса
Picture
. Работа с помощью описателей позволяет
манипулировать рисунками, используя обычные поцедуры и функции и не
используя классы.
Каждый рисунок, хранящийся во время работы программы
в оперативной памяти, имеет описатель (дескриптор), представляющий
собой целое число. Это число возвращается функцией загрузки рисунка
из файла LoadPicture
, а также функцией создания рисунка
CreatePicture
, после чего передается в качестве первого
параметра во все остальные процедуры и функции работы с рисунками.
function
LoadPicture(fname: string): integer;
n:=LoadPicture(fname)
– загружает рисунок из файла с именем fname
в
оперативную память и возвращает описатель рисунка в целую переменную
n
; если файл не найден, то возникает ошибка времени
выполнения. Загружать можно рисунки в формате .bmp, .jpg или .gif.
procedure
SavePicture(n: integer; fname: string);
Сохраняет рисунок с описателем
n
в файл
с именем fname
. Рисунки можно сохранять в формате .bmp,
.jpg или .gif.
procedure
DrawPicture(n,x,y: integer);
Выводит рисунок с описателем
n
в позицию
(x,y)
графического окна.
procedure
DrawPicture(n,x,y,w,h: integer);
Выводит рисунок с описателем
n
в позицию
(x,y)
графического окна, масштабируя его размеры к
ширине w
и высоте
h
. Если w<0
,
то рисунок зеркально отражается относительно вертикальной прямой,
проходящей через x
, если же
h<0
, то
рисунок зеркально отражается относительно горизонтальной прямой,
проходящей через y
.
procedure
DrawPicture(n: integer; x,y: integer; r: Rect);
Выводит часть рисунка с описателем
n
,
заключенную в прямоугольнике r
, в позицию
(x,y)
графического окна.
procedure
DrawPicture(n: integer; x,y,w,h: integer; r: Rect);
Выводит часть рисунка с описателем
n
,
заключенную в прямоугольнике r
, в позицию
(x,y)
графического окна, масштабируя его размеры к ширине
w
и
высоте h
. Если
w<0
, то рисунок зеркально
отражается относительно вертикальной прямой, проходящей через
x
, если же
h<0
, то рисунок зеркально отражается
относительно горизонтальной прямой, проходящей через
y
.
procedure
CopyRect(n: integer; dest: Rect; n1: integer; src: Rect);
Копирует часть рисунка с описателем
n1
,
заключенную в прямоугольнике src
, в прямоугольник
dest
рисунка с описателем
n
.
procedure
DestroyPicture(n: integer);
Удаляет рисунок с описателем
n
из
оперативной памяти, описатель рисунка при этом становится
недействительным.
procedure
SetPictureSize(n,w,h: integer);
Устанавливает размер рисунка с описателем
n
равным w
на
h
пикселей.
function
PictureWidth(n: integer): integer;
Возвращает ширину рисунка с описателем
n
.
function
PictureHeight(n: integer): integer;
Возвращает высоту рисунка с описателем
n
.
function
PictureTransparent(n: integer): boolean;
Возвращает режим прозрачности рисунка с описателем
n
.
function
CreatePicture(w,h: integer): integer;
Создает рисунок ширины w
и высоты
h
и возвращает его описатель.
function
CreatePictureFromRect(r: Rect): integer;
Создает рисунок из прямоугольника
r
графического окна и возвращает его описатель.
function
CreatePictureFromScreenBufferRect(r: Rect): integer;
Создает рисунок из прямоугольника
r
внеэкранного буфера графического окна и возвращает его описатель.
procedure
SetPictureTransparent(n: integer; b: boolean);
Устанавливает (b=True
) или отключает (b=False
)
режим прозрачности при рисовании рисунка с описателем
n
.
Если b=True
, то при его рисовании фон не отображается.
Фоновым считается цвет левого нижнего пиксела рисунка.
function
ImageIntersect(n1,n2: integer): boolean;
Определяет, пересекаются ли изображения на рисунках с
описателями n1
и
n2
. Рисунки должны иметь
одинаковый размер. Белый цвет на рисунке считается прозрачным.
Изображения на рисунках считаются пересекающимися, если имеется хотя
бы один пиксел, который не прозрачен и имеет одни и те же координаты
для обоих рисунков.
function
StandardImageFolder: string;
Возвращает стандартный каталог для картинок (обычно
\Media\Images\
).
procedure
FlipPictureHorizontal(n);
Зеркально отображает картинку с описателем
n
относительно горизонтальной оси симметрии.
procedure
FlipPictureVertical(n);
Зеркально отображает картинку с описателем
n
относительно вертикальной оси симметрии.
Действия с графическим окном
procedure
ClearWindow;
Очищает графическое окно белым цветом.
procedure
ClearWindow(c: ColorType);
Очищает графическое окно цветом
c
.
function
WindowWidth: integer;
Возвращает ширину графического окна.
function
WindowHeight: integer;
Возвращает высоту графического окна.
function
WindowLeft: integer;
Возвращает отступ графического окна от левого края
экрана.
function
WindowTop: integer;
Возвращает отступ графического окна от верхнего края
экрана.
function
WindowCaption: string;
Возвращает заголовок графического окна.
procedure
SetWindowWidth(w: integer);
Устанавливает ширину графического окна.
procedure
SetWindowHeight(h: integer);
Устанавливает высоту графического окна.
procedure
SetWindowLeft(l: integer);
Устанавливает отступ графического окна от левого края
экрана.
procedure
SetWindowTop(t: integer);
Устанавливает отступ графического окна от верхнего
края экрана.
procedure
SetWindowSize(w,h: integer);
Устанавливает ширину и высоту графического окна.
procedure
SetWindowPos(l,t: integer);
Устанавливает отступ графического окна от левого и
верхнего края экрана.
procedure
SetWindowCaption(s: string);
Устанавливает заголовок графического окна.
procedure
SetWindowTitle(s: string);
Устанавливает заголовок графического окна. Синоним
SetWindowCaption
.
procedure
SaveWindow(fname: string);
Сохраняет содержимое графического окна в файл с
именем fname
.
procedure
LoadWindow(fname: string);
Выводит в графическое окно рисунок из файла с именем
fname
. Файл ищется вначале в текущем каталоге, а затем
в каталоге PascalABC\Media\Images
.
procedure
FillWindow(fname: string);
Заполняет графическое окно мозаикой из рисунка,
содержащегося в файле с именем fname
.
procedure
FillWindow(n: integer);
Заполняет графическое окно мозаикой из рисунка с
описателем n.
procedure
CloseWindow;
Закрывает графическое окно.
function
ScreenWidth: integer;
Возвращает ширину экрана.
function
ScreenHeight: integer;
Возвращает высоту экрана.
procedure
CenterWindow;
Центрирует графическое окно по центру экрана.
procedure
MaximizeWindow;
Максимизирует графическое окно на экране.
procedure
NormalizeWindow;
Восстанавливает положение графического окна на
экране.
Все размеры устанавливаются и возвращаются в
пикселах.
Задание режимов вывода
procedure
SetDrawingSurface(n: integer);
Устанавливает в качестве канвы для рисования рисунок
с описателем n
. В результате весь графический вывод
осуществляется не на экран, а на рисунок; настройки кисти, пера и
шрифта также осуществляются для рисунка.
procedure
SetDrawingSurface(p: Picture);
Устанавливает в качестве канвы для рисования рисунок
с описателем n
. В результате весь графический вывод
осуществляется не на экран, а на рисунок; настройки кисти, пера и
шрифта также осуществляются для рисунка.
procedure
RestoreDrawingSurface;
Устанавливает в качестве канвы для рисования
графическое окно.
procedure
Redraw;
Осуществляет перерисовку окна вывода при
заблокированном выводе в графическое окно.
procedure
LockDrawing;
Блокирует вывод в графическое окно, осуществляя
рисование только во внеэкранном буфере. Для перерисовки графического
окна требуется вызвать процедуру Redraw
. Если
графический вывод перенаправлен в рисунок вызовом процедуры
SetDrawingSurface
, то не оказывает никакого воздействия на
вывод.
procedure
UnlockDrawing;
Снимает блокировку вывода в графическое окно.
procedure
LockScreenBuffer;
.Блокирует вывод во внеэкранный буфер графического
окна. После вызова этой процедуры рисование незначительно
ускоряется, однако, изображение графического окна перестает
восстанавливаться.
procedure
UnlockScreenBuffer;
Снимает блокировку вывода во внеэкранный буфер
графического окна.
function
DrawingIsLocked: boolean;
Возвращает True
, если вывод в
графическое окно заблокирован, и False
в противном
случае.
procedure
SetRedrawProc(procedure RedrawProc);
Устанавливает пользовательскую процедуру для
перерисовки содержимого графического окна, вызываемую автоматически
в тот момент, когда требуется его перерисовка. В настоящее время
используется в модуле ABCObjects
для автоматической
перерисовки всех графических объектов и фона.
Блокировка вывода в графическое окно с последующим
вызовом Redraw
используется для простейшего создания
анимации без мерцания.
Класс Picture
Для работы с рисунками в модуле
GraphABC
используются либо описатели, либо объекты класса
Picture
.
Класс Picture
описывает рисунок,
хранящийся в оперативной памяти, и имеет следующий интерфейс:
type
Picture=class
constructor Create(w,h: integer);
constructor Create(fname: string);
constructor CreateFromRect(r: Rect);
constructor CreateFromScreenBufferRect(r: Rect);
destructor Destroy;
procedure Load(fname: string);
procedure Save(fname: string);
procedure SetSize(w,h: integer);
property Width: integer;
property Height: integer;
property Transparent: boolean;
property NeedDestroy: boolean;
function Handle: integer;
function Intersect(p: Picture): boolean;
procedure Draw(x,y: integer);
procedure Draw(x,y,w,h: integer);
procedure Draw(x,y: integer; r: Rect);
procedure Draw(x,y,w,h: integer; r: Rect);
procedure CopyRect(dst: Rect; p: Picture; src: Rect);
procedure FlipHorizontal;
procedure FlipVertical;
end;
Конструкторы и деструкторы |
constructor
Create(w,h: integer);
Создает объект класса
Picture
ширины w
и
высоты h
. Рисунок может быть скопирован
в него из прямоугольной области другого
рисунка методом CopyRect
. На рисунке может быть также
произведено рисование вызовом любых процедур рисования после
установки его в качестве поверхности рисования (метод
SetDrawingSurface
).
constructor
Create(fname: string);
Создает объект класса Picture
и
загружает в него рисунок из файла fname
(допустимые
форматы файлов: .bmp, .gif, .jpg, .png). Рисунок с именем
fname
ищется вначале в текущем каталоге, а затем в
подкаталоге Media\Images\ каталога программы PascalABC.exe.
constructor
CreateFromRect(r: Rect);
Создает объект класса Picture
и копирует
в него изображение из прямоугольника r
на экране.
Размер рисунка равен размеру прямоугольника.
constructor
CreateFromScreenBufferRect(r: Rect);
Создает объект класса Picture
и копирует
в него изображение из прямоугольника r
внеэкранного
буфера. Размер рисунка равен размеру прямоугольника.
destructor
Destroy;
Разрушает объект. Если NeedDestroy
установлено в True
, то рисунок, находящийся в объекте
Picture
, также разрушается.
property Width:
integer;
Ширина рисунка.
property
Height: integer;
Высота рисунка.
property
Transparent: boolean;
Прозрачность рисунка. Если
Transparent=True
,
то при выводе рисунка его фон не отображается. Фоновым считается
цвет левого нижнего пиксела рисунка.
property
NeedDestroy: boolean;
Определяет, должен ли рисунок разрушаться при вызове
деструктора и метода Load. NeedDestroy
обычно
устанавливается в False
, если несколько объектов класса
Picture
разделяют один рисунок.
procedure Load(fname:
string);
Загружает рисунок из файла с именем
fname
.
Если NeedDestroy
установлено в
True
, то
рисунок, находившийся ранее в объекте Picture
,
разрушается. Рисунок с именем fname
ищется вначале в
текущем каталоге, а затем в подкаталоге Media\Images\ каталога
программы PascalABC.exe.
procedure Save(fname:
string);
Сохраняет рисунок в файле с именем
fname
.
Формат рисунка устанавливается расширением имени файла. Допустимые
расширения: .bmp, .gif, .jpg, .png.
function
Handle: integer;
Возвращает описатель рисунка.
procedure Draw(x,y:
integer);
Выводит рисунок в позицию (x,y) графического окна.
procedure Draw(x,y,w,h:
integer);
Выводит рисунок в позицию (x,y)
графического окна, масштабируя его к размеру
(w,h)
.
Если w<0
или
h<0
, то выводится зеркальное
отражение рисунка относительно вертикалоной или горизонтальной оси
соответственно.
procedure Draw(x,y:
integer; r: Rect);
Выводит часть рисунка, заключенную в прямоугольнике
r
, в позицию
(x,y)
графического окна.
procedure Draw(x,y,w,h:
integer; src: Rect);
Выводит часть рисунка, заключенную в прямоугольнике
r
, в позицию
(x,y)
графического окна,
масштабируя ее к размеру (w,h)
.
procedure
CopyRect(dest: Rect; p: Picture; src: Rect);
Копирует в прямоугольник
dest
текущего рисунка
часть рисунка p
,
заключенную в прямоугольнике src
.
procedure
FlipHorizontal;
Зеркально отображает картинку относительно
горизонтальной оси симметрии.
procedure
FlipVertical;
Зеркально отображает картинку относительно
вертикальной оси симметрии.
Описатели рисунков и класс Picture
Рисунки удобно рассматривать как объекты класса
Picture
, в котором собраны все основные действия с рисунками.
Такой подход является более удобным и современным, чем подход с
описателями рисунков. Единственный его недостаток - необходимость
вводить основные понятия, связанные с классами, при обучении
использованию рисунков. Подход с
описателями позволяет работать с рисунками сразу после
рассмотрения темы "Процедуры и функции" или даже раньше, если
подпрограммы рассматривать просто как команды.
Тем не менее, автор программы настоятельно
рекомендует использовать именно класс Picture
при
работе с рисунками, что позволит ученику раньше начать осваивать
основные понятия объектно-ориентированного программирования.
Класс
Picture
полностью написан на Pascal ABC и содержит
в своем интерфейсе все подпрограммы работы с рисунками.
Пример работы с рисунком с использованием описателей.
uses GraphABC;
var n: integer;
begin
n:=LoadPicture('demo.bmp');
SetPictureTransparent(n,True);
DrawPicture(n,0,0);
DestroyPicture(n);
end.
Эквивалентный пример работы с рисунком как объектом
класса Picture
выглядит более естественным:
uses GraphABC;
var p: Picture;
begin
p:=Picture.Create('demo.bmp');
p.Transparent:=True;
p.Draw(0,0);
p.Destroy;
end.