Описание языка «PascalABC.NET».

Модуль GraphABC.

Модуль GraphABC представляет собой простую графическую библиотеку и предназначен для создания несобытийных графических и анимационных программ в процедурном и частично в объектном стиле. Рисование осуществляется в специальном графическом окне, возможность рисования в нескольких окнах отсутствует. Кроме этого, в модуле GraphABC определены простейшие события мыши и клавиатуры, позволяющие создавать элементарные событийные приложения. Основная сфера использования модуля GraphABC - обучение.

Модуль GraphABC основан на графической библиотеке GDI+, но запоминает текущие перо, кисть и шрифт, что позволяет не передавать их в качестве параметров при вызове графических примитивов. К свойствам пера, кисти и шрифта можно получать доступ как в процедурном, так и в объектном стиле. Например, для доступа к цвету текущего пера используется процедура SetPenColor(c) и функция PenColor, а также свойство Pen.Color.

В модуле GraphABC можно управлять самим графическим окном и компонентом GraphABCControl, на котором осуществляется рисование. По умолчанию компонент GraphABCControl занимает всю клиентскую часть графического окна, однако, на графическое окно можно добавить элементы управления, уменьшив область, занимаемую графическим компонентом (например, так сделано в модулях Robot и Drawman).

Для работы с рисунками используется класс Picture, позволяющий рисовать на себе те же графические примитивы, что и на экране.

Режим блокировки рисования на экране (LockDrawing) позволяет осуществлять прорисовку лишь во внеэкранном буфере, после чего с помощью метода Redraw восстанавливать все графическое окно. Данный метод используется для ускорения анимации и создания анимации без мерцания.

В модуле GraphABC определен ряд констант, типов, процедур, функций и классов для рисования в графическом окне. Они подразделяются на следующие группы:

Графические примитивы. Функции для работы с цветом. Цветовые константы. Действия с пером: процедуры и функции. Действия с пером: объект Pen. Стиль пера. Действия с кистью: процедуры и функции. Действия с кистью: объект Brush. Стили кисти. Стили штриховки кисти. Действия со шрифтом: процедуры и функции. Действия со шрифтом: объект Font. Стили шрифта. Действия с рисунками: класс Picture. Действия с графическим окном: процедуры и функции. Действия с графическим окном: объект Window. Действия с системой координат: процедуры и функции. Действия с системой координат: объект Coordinate. Блокировка рисования и ускорение анимации. Режимы рисования. События GraphABC. Виртуальные коды клавиш. Перенаправление ввода-вывода.

Типы и переменные модуля GraphABC.

Color = System.Drawing.Color;

Тип цвета.
Point = System.Drawing.Point; Тип точки.
GraphABCException = class(Exception) end; Тип исключения GraphABC.
RedrawProc: procedure; Процедурная переменная перерисовки графического окна. Если равна nil, то используется стандартная перерисовка.
DrawInBuffer: boolean; Следует ли рисовать во внеэкранном буфере.

Графические примитивы.

Графические примитивы представляют собой процедуры, осуществляющие рисование в графическом окне. Рисование осуществляется текущим пером (линии), текущей кистью (заливка замкнутых областей) и текущим шрифтом (вывод строк).

Procedure SetPixel(x,y: integer; c: Color); Закрашивает пиксел с координатами (x,y) цветом c.
Procedure PutPixel(x,y: integer; c: Color); Закрашивает пиксел с координатами (x,y) цветом c.
Function GetPixel(x,y: integer): Color; Возвращает цвет пиксела с координатами (x,y).
Procedure MoveTo(x,y: integer); Устанавливает текущую позицию рисования в точку (x,y).
Procedure LineTo(x,y: integer); Рисует отрезок от текущей позиции до точки (x,y). Текущая позиция переносится в точку (x,y).
Procedure LineTo(x,y: integer; c: Color); Рисует отрезок от текущей позиции до точки (x,y) цветом c. Текущая позиция переносится в точку (x,y).
Procedure Line(x1,y1,x2,y2: integer); Рисует отрезок от точки (x1,y1) до точки (x2,y2).
Procedure Line(x1,y1,x2,y2: integer; c: Color); Рисует отрезок от точки (x1,y1) до точки (x2,y2) цветом c.
Procedure FillCircle(x,y,r: integer); Заполняет внутренность окружности с центром (x,y) и радиусом r.
Procedure DrawCircle(x,y,r: integer); Рисует окружность с центром (x,y) и радиусом r.
Procedure FillEllipse(x1,y1,x2,y2: integer); Заполняет внутренность эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2).
Procedure DrawEllipse(x1,y1,x2,y2: integer); Рисует границу эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2).
Procedure FillRectangle(x1,y1,x2,y2: integer); Заполняет внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2).
Procedure FillRect(x1,y1,x2,y2: integer); Заполняет внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2).
Procedure DrawRectangle(x1,y1,x2,y2: integer); Рисует границу прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2).
Procedure FillRoundRect(x1,y1,x2,y2,w,h: integer); Заполняет внутренность прямоугольника со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев.
Procedure DrawRoundRect(x1,y1,x2,y2,w,h: integer); Рисует границу прямоугольника со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев.
Procedure Circle(x,y,r: integer); Рисует заполненную окружность с центром (x,y) и радиусом r.
Procedure Ellipse(x1,y1,x2,y2: integer); Рисует заполненный эллипс, ограниченный прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2).
Procedure Rectangle(x1,y1,x2,y2: integer); Рисует заполненный прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2).
Procedure RoundRect(x1,y1,x2,y2,w,h: integer); Рисует заполненный прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев.
Procedure Arc(x,y,r,a1,a2: integer); Рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки).
Procedure FillPie(x,y,r,a1,a2: integer); Заполняет внутренность сектора окружности, ограниченного дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки).
Procedure DrawPie(x,y,r,a1,a2: integer); Рисует сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки).
Procedure Pie(x,y,r,a1,a2: integer); Рисует заполненный сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки).
Procedure DrawPolygon(points: array of Point); Рисует замкнутую ломаную по точкам, координаты которых заданы в массиве points.
Procedure FillPolygon(points: array of Point); Заполняет многоугольник, координаты вершин которого заданы в массиве points.
Procedure Polygon(points: array of Point); Рисует заполненный многоугольник, координаты вершин которого заданы в массиве points.
Procedure Polyline(points: array of Point); Рисует ломаную по точкам, координаты которых заданы в массиве points.
Procedure Curve(points: array of Point); Рисует кривую по точкам, координаты которых заданы в массиве points.
Procedure DrawClosedCurve(points: array of Point); Рисует замкнутую кривую по точкам, координаты которых заданы в массиве points.
Procedure FillClosedCurve(points: array of Point); Заполняет замкнутую кривую по точкам, координаты которых заданы в массиве points.
Procedure ClosedCurve(points: array of Point); Рисует заполненную замкнутую кривую по точкам, координаты которых заданы в массиве points.
Procedure TextOut(x,y: integer; s: string); Выводит строку s в прямоугольник к координатами левого верхнего угла (x,y).
Procedure TextOut(x,y: integer; n: integer); Выводит целое n в прямоугольник к координатами левого верхнего угла (x,y).
Procedure TextOut(x,y: integer; r: real); Выводит вещественное r в прямоугольник к координатами левого верхнего угла (x,y).
Procedure DrawTextCentered(x,y,x1,y1: integer; s: string); Выводит строку s, отцентрированную в прямоугольнике с координатами (x,y,x1,y1).
Procedure DrawTextCentered(x,y,x1,y1: integer; n: integer); Выводит целое значение n, отцентрированное в прямоугольнике с координатами (x,y,x1,y1).
Procedure DrawTextCentered(x,y,x1,y1: integer; r: real); Выводит вещественное значение r, отцентрированное в прямоугольнике с координатами (x,y,x1,y1).
Procedure FloodFill(x,y: integer; c: Color); Заливает область одного цвета цветом c, начиная с точки (x,y).

Функции для работы с цветом.

Тип цвета Color является синонимом System.Drawing.Color.

Function RGB(r,g,b: byte): Color; Возвращает цвет, который содержит красную (r), зеленую (g) и синюю (b) составляющие (r,g и b - в диапазоне от 0 до 255).
Function ARGB(a,r,g,b: byte): Color; Возвращает цвет, который содержит красную (r), зеленую (g) и синюю (b) составляющие и прозрачность (a) (a,r,g,b - в диапазоне от 0 до 255).
Function RedColor(r: byte): Color; Возвращает красный цвет с интенсивностью r (r - в диапазоне от 0 до 255).
Function GreenColor(g: byte): Color; Возвращает зеленый цвет с интенсивностью g (g - в диапазоне от 0 до 255).
Function BlueColor(b: byte): Color; Возвращает синий цвет с интенсивностью b (b - в диапазоне от 0 до 255).
Function clRandom: Color; Возвращает случайный цвет.
Function GetRed(c: Color): integer; Возвращает красную составляющую цвета.
Function GetGreen(c: Color): integer; Возвращает зеленую составляющую цвета.
Function GetBlue(c: Color): integer; Возвращает синюю составляющую цвета.
Function GetAlpha(c: Color): integer; Возвращает составляющую прозрачности цвета.

Цветовые константы.

ClAquamarine.

ClAzure. ClBeige.
ClBisque. ClBlack. ClBlanchedAlmond.
ClBlue. ClBlueViolet. ClBrown.
ClBurlyWood. ClCadetBlue. ClChartreuse.
ClChocolate. ClCoral. ClCornflowerBlue.
ClCornsilk. ClCrimson. ClCyan.
ClDarkBlue. ClDarkCyan. ClDarkGoldenrod.
ClDarkGray. ClDarkGreen. ClDarkKhaki.
ClDarkMagenta. ClDarkOliveGreen. ClDarkOrange.
ClDarkOrchid. ClDarkRed. ClDarkTurquoise.
ClDarkSeaGreen. ClDarkSlateBlue. ClDarkSlateGray.
ClDarkViolet. ClDeepPink. ClDarkSalmon.
ClDeepSkyBlue. ClDimGray. ClDodgerBlue.
ClFirebrick. ClFloralWhite. ClForestGreen.
ClFuchsia. ClGainsboro. ClGhostWhite.
ClGold. ClGoldenrod. ClGray.
ClGreen. ClGreenYellow. ClHoneydew.
ClHotPink. ClIndianRed. ClIndigo.
ClIvory. ClKhaki. ClLavender.
ClLavenderBlush. ClLawnGreen. ClLemonChiffon.
ClLightBlue. ClLightCoral. ClLightCyan.
ClLightGray. ClLightGreen. ClLightGoldenrodYellow.
ClLightPink. ClLightSalmon. ClLightSeaGreen.
ClLightSkyBlue. ClLightSlateGray. ClLightSteelBlue.
ClLightYellow. ClLime. ClLimeGreen.
ClLinen. ClMagenta. ClMaroon.
ClMediumBlue. ClMediumOrchid. ClMediumAquamarine.
ClMediumPurple. ClMediumSeaGreen. ClMediumSlateBlue.
ClMoneyGreen. ClPlum. ClMistyRose.
ClNavy. ClMidnightBlue. ClMintCream.
ClMediumSpringGreen. ClMoccasin. ClNavajoWhite.
ClMediumTurquoise. ClOldLace. ClOlive.
ClOliveDrab. ClOrange. ClOrangeRed.
ClOrchid. ClPaleGoldenrod. ClPaleGreen.
ClPaleTurquoise. ClPaleVioletRed. ClPapayaWhip.
ClPeachPuff. ClPeru. ClPink.
ClMediumVioletRed. ClPowderBlue. ClPurple.
ClRed. ClRosyBrown. ClRoyalBlue.
ClSaddleBrown. ClSalmon. ClSandyBrown.
ClSeaGreen. ClSeaShell. ClSienna.
ClSilver. ClSkyBlue. ClSlateBlue.
ClSlateGray. ClSnow. ClSpringGreen.
ClSteelBlue. ClTan. ClTeal.
ClThistle. ClTomato. ClTransparent.
ClTurquoise. ClViolet. ClWheat.
ClWhite. ClWhiteSmoke. ClYellow.
ClYellowGreen.

Подпрограммы для работы с пером.

Рисование линий осуществляется текущим пером. Доступ к свойствам текущего пера можно осуществлять как в процедурном, так и в объектно-ориентированном стиле.

Процедуры и функции для доступа к свойствам пера сгруппированы парами: если Prop - имя свойства пера, то функция PenProp возвращает значение этого свойства, а процедура SetPenProp(p) устанавливает это свойство:

Procedure SetPenColor(c: Color); Устанавливает цвет текущего пера.
Function PenColor: Color; Возвращает цвет текущего пера.
Procedure SetPenWidth(Width: integer); Устанавливает ширину текущего пера.
Function PenWidth: integer; Возвращает ширину текущего пера.
Procedure SetPenStyle(style: DashStyle); Устанавливает стиль текущего пера. Константы стилей пера приведены здесь.
Function PenStyle: DashStyle; Возвращает стиль текущего пера. Константы стилей пера приведены здесь.
Procedure SetPenMode(m: integer); Устанавливает режим текущего пера.
Function PenMode: integer; Возвращает режим текущего пера.
Function PenX: integer; Возвращают x-координату текущей позиции рисования.
Function PenY: integer; Возвращают y-координату текущей позиции рисования.

Кроме этого, можно изменять свойства текущего пера через объект Pen.

Текущее перо Pen.

Объект текущего пера возвращается функцией Pen и имеет тип GraphABCPen:

Function Pen: GraphABCPen;

Класс GraphABCPen имеет следующий интерфейс:

Type. GraphABCPen = class. property NETPen: System.Drawing.Pen; property Color: GraphABC.Color; property Width: integer; property Style: DashStyle; property Mode: integer; property X: integer; property Y: integer; end;

Свойства класса GraphABCPen описаны в следующей таблице:

Property NETPen: System.Drawing.Pen; Текущее перо .NET. Служит для более тонкой настройки свойств пера.
Property Color: GraphABC.Color; Цвет пера.
Property Width: integer; Ширина пера.
Property Style: DashStyle; Стиль пера. Константы стилей пера приведены здесь.
Property Mode: integer; Режим пера.
Property X: integer; Координата X пера (только чтение).
Property Y: integer; Координата Y пера (только чтение).

Пример.

Pen.Color := clRed; Pen.Style := psDot;

Кроме этого, можно изменять свойства текущего пера, используя соответствующие процедуры и функции.

Стили пера.

Стили пера задаются перечислимым типом DashStyle. Кроме того, для стилей пера определены следующие константы:

PsSolid = DashStyle.Solid; Сплошное перо. Описание языка «PascalABC.NET».
PsClear = DashStyle.Clear; Прозрачное перо. Описание языка «PascalABC.NET».
PsDash = DashStyle.Dash; Штриховое перо. Описание языка «PascalABC.NET».
PsDot = DashStyle.Dot; Пунктирное перо. Описание языка «PascalABC.NET».
PsDashDot = DashStyle.DashDot; Штрихунктирное перо. Описание языка «PascalABC.NET».
PsDashDotDot = DashStyle.DashDotDot; Альтернативное штрихунктирное перо. Описание языка «PascalABC.NET».

Подпрограммы для работы с кистью.

Рисование внутренностей замкнутых областей осуществляется текущей кистью. Доступ к свойствам текущей кисти можно осуществлять как в процедурном, так и в объектно-ориентированном стиле.

Процедуры и функции для доступа к свойствам кисти сгруппированы парами: если Prop - имя свойства кисти, то функция PenProp возвращает значение этого свойства, а процедура SetPenProp(p) устанавливает это свойство:

Procedure SetBrushColor(c: Color); Устанавливает цвет текущей кисти.
Function BrushColor: Color; Возвращает цвет текущей кисти.
Procedure SetBrushStyle(bs: BrushStyleType); Устанавливает стиль текущей кисти. Константы стилей кисти приведены здесь.
Function BrushStyle: BrushStyleType; Возвращает стиль текущей кисти. Константы стилей кисти приведены здесь.
Procedure SetBrushHatch(bh: HatchStyle); Устанавливает штриховку текущей кисти. Константы стилей штриховки кисти приведены здесь.
Function BrushHatch: HatchStyle; Возвращает штриховку текущей кисти. Константы стилей штриховки кисти приведены здесь.
Procedure SetHatchBrushBackgroundColor(c: Color); Устанавливает цвет заднего плана текущей штриховой кисти.
Function HatchBrushBackgroundColor: Color; Возвращает цвет заднего плана текущей штриховой кисти.
Procedure SetGradientBrushSecondColor(c: Color); Устанавливает второй цвет текущей градиентной кисти.
Function GradientBrushSecondColor: Color; Возвращает второй цвет текущей градиентной кисти.

Кроме этого, можно изменять свойства текущей кисти через объект Brush.

Текущая графическая кисть Brush.

Объект текущей кисти возвращается функцией Brush и имеет тип GraphABCBrush:

Function Brush: GraphABCBrush;

Класс GraphABCBrush имеет следующий интерфейс:

Type. GraphABCBrush = class. property NETBrush: System.Drawing.Brush; property Color: GraphABC.Color; property Style: BrushStyleType; property Hatch: HatchStyle; property HatchBackgroundColor: GraphABC.Color; property GradientSecondColor: GraphABC.Color; end;

Свойства класса GraphABCBrush описаны в следующей таблице:

Property NETBrush: System.Drawing.Brush; Текущая кисть .NET.
Property Color: GraphABC.Color; Цвет кисти.
Property Style: BrushStyleType; Стиль кисти.
Property Hatch: HatchStyle; Штриховка кисти.
Property HatchBackgroundColor: GraphABC.Color; Цвет заднего плана штриховой кисти.
Property GradientSecondColor: GraphABC.Color; Второй цвет градиентной кисти.

Пример.

Brush.Color := clRed; Brush.Style := bsHatch; Brush.Hatch := bhBackwardDiagonal;

Кроме того, можно изменять свойства текущей кисти, используя соответствующие процедуры и функции.

Стили кисти.

Стили кисти задаются перечислимым типом BrushStyleType:

Type BrushStyleType = (bsSolid, bsClear, bsHatch, bsGradient);

Константы имеют следующий смысл:

BsSolid. Сплошная кисть (по умолчанию).
BsClear. Прозрачная кисть.
BsHatch. Штриховая кисть.
BsGradient. Градиентная кисть.

Для всех кистей используется свойство Color. Для штриховой кисти дополнительно можно устанавливать свойства Hatch и HatchBackgroundColor, для градиентной - свойство GradientSecondColor.

Стили штриховки кисти.

Стили штриховки кисти задаются перечислимым типом HatchStyle. Кроме того, для стилей штриховки кисти определены следующие константы:

BhHorizontal. Описание языка «PascalABC.NET».
BhVertical. Описание языка «PascalABC.NET».
BhForwardDiagonal. Описание языка «PascalABC.NET».
BhBackwardDiagonal. Описание языка «PascalABC.NET».
BhCross. Описание языка «PascalABC.NET».
BhDiagonalCross. Описание языка «PascalABC.NET».
BhPercent05. Описание языка «PascalABC.NET».
BhPercent10. Описание языка «PascalABC.NET».
BhPercent20. Описание языка «PascalABC.NET».
BhPercent25. Описание языка «PascalABC.NET».
BhPercent30. Описание языка «PascalABC.NET».
BhPercent40. Описание языка «PascalABC.NET».
BhPercent50. Описание языка «PascalABC.NET».
BhPercent60. Описание языка «PascalABC.NET».
BhPercent70. Описание языка «PascalABC.NET».
BhPercent75. Описание языка «PascalABC.NET».
BhPercent80. Описание языка «PascalABC.NET».
BhPercent90. Описание языка «PascalABC.NET».
BhLightDownwardDiagonal. Описание языка «PascalABC.NET».
BhLightUpwardDiagonal. Описание языка «PascalABC.NET».
BhDarkDownwardDiagonal. Описание языка «PascalABC.NET».
BhDarkUpwardDiagonal. Описание языка «PascalABC.NET».
BhWideDownwardDiagonal. Описание языка «PascalABC.NET».
BhWideUpwardDiagonal. Описание языка «PascalABC.NET».
BhLightVertical. Описание языка «PascalABC.NET».
BhLightHorizontal. Описание языка «PascalABC.NET».
BhNarrowVertical. Описание языка «PascalABC.NET».
BhNarrowHorizontal. Описание языка «PascalABC.NET».
BhDarkVertical. Описание языка «PascalABC.NET».
BhDarkHorizontal. Описание языка «PascalABC.NET».
BhDashedDownwardDiagonal. Описание языка «PascalABC.NET».
BhDashedUpwardDiagonal. Описание языка «PascalABC.NET».
BhDashedHorizontal. Описание языка «PascalABC.NET».
BhDashedVertical. Описание языка «PascalABC.NET».
BhSmallConfetti. Описание языка «PascalABC.NET».
BhLargeConfetti. Описание языка «PascalABC.NET».
BhZigZag. Описание языка «PascalABC.NET».
BhWave. Описание языка «PascalABC.NET».
BhDiagonalBrick. Описание языка «PascalABC.NET».
BhHorizontalBrick. Описание языка «PascalABC.NET».
BhWeave. Описание языка «PascalABC.NET».
BhPlaid. Описание языка «PascalABC.NET».
BhDivot. Описание языка «PascalABC.NET».
BhDottedGrid. Описание языка «PascalABC.NET».
BhDottedDiamond. Описание языка «PascalABC.NET».
BhShingle. Описание языка «PascalABC.NET».
BhTrellis. Описание языка «PascalABC.NET».
BhSphere. Описание языка «PascalABC.NET».
BhSmallGrid. Описание языка «PascalABC.NET».
BhSmallCheckerBoard. Описание языка «PascalABC.NET».
BhLargeCheckerBoard. Описание языка «PascalABC.NET».
BhOutlinedDiamond. Описание языка «PascalABC.NET».
BhSolidDiamond. Описание языка «PascalABC.NET».
BhMin. Описание языка «PascalABC.NET».
BhLargeGrid. Описание языка «PascalABC.NET».
BhMax. Описание языка «PascalABC.NET».

Подпрограммы для работы со шрифтом.

Вывод текста осуществляется текущим шрифтом. Доступ к свойствам текущего шрифта можно осуществлять как в процедурном, так и в объектно-ориентированном стиле.

Процедуры и функции для доступа к свойствам шрифта сгруппированы парами: если Prop - имя свойства пера, то функция PenProp возвращает значение этого свойства, а процедура SetPenProp(p) устанавливает это свойство:

Procedure SetFontSize(size: integer); Устанавливает размер текущего шрифта в пунктах.
Function FontSize: integer; Возвращает размер текущего шрифта в пунктах.
Procedure SetFontName(name: string); Устанавливает имя текущего шрифта.
Function FontName: string; Возвращает имя текущего шрифта.
Procedure SetFontColor(c: Color); Устанавливает цвет текущего шрифта.
Function FontColor: Color; Возвращает цвет текущего шрифта.
Procedure SetFontStyle(fs: integer); Устанавливает стиль текущего шрифта.
Function FontStyle: integer; Возвращает стиль текущего шрифта.

Можно также изменять свойства текущего пера через объект Font.

Кроме того, для определения ширины и высоты строки при текущих настройках шрифта используются следующие функции:

Function TextWidth(s: string): integer; Возвращает ширину строки s в пикселях при текущих настройках шрифта.
Function TextHeight(s: string): integer; Возвращает высоту строки s в пикселях при текущих настройках шрифта.

Текущий шрифт Font.

Объект текущего шрифта возвращается функцией Font и имеет тип GraphABCFont:

Function Font: GraphABCFont;

Класс GraphABCFont имеет следующий интерфейс: Кроме этого, можно изменять свойства текущего пера через объект Font.

Type. GraphABCFont = class. property NETFont: System.Drawing.Font; property Color: GraphABC.Color; property Style: integer; property Size: integer; property Name: string; end;

Свойства класса GraphABCFont описаны в следующей таблице:

Property NETFont: System.Drawing.Font; Текущий шрифт .NET.
Property Color: GraphABC.Color; Цвет шрифта.
Property Style: FontStyleType; Стиль шрифта.
Property Size: integer; Размер шрифта в пунктах.
Property Name: string; Наименование шрифта.

Кроме этого, можно изменять свойства текущего шрифта, используя соответствующие процедуры и функции.

Стили шрифта.

Стиль шрифта задается перечислимым типом FontStyleType, который содержит следующие константы:

FsNormal – обычный; FsBold – жирный; FsItalic – наклонный; FsBoldItalic – жирный наклонный; FsUnderline – подчеркнутый; FsBoldUnderline – жирный подчеркнутый; FsItalicUnderline – наклонный подчеркнутый; FsBoldItalicUnderline – жирный наклонный подчеркнутый.

Класс Picture графического рисунка.

Класс Picture представляет собой графический рисунок модуля GraphABC и является надстройкой над типом System.Drawing.Bitmap. Он имеет свойство прозрачности, которое можно включать/выключать, а также возможность непосредственного рисования на себе всех графических примитивов.

Конструкторы класса Picture.

Constructor Create(w,h: integer); Создает рисунок размера w на h пикселей.
Constructor Create(fname: string); Создает рисунок из файла с именем fname.
Constructor Create(r: System.Drawing.Rectangle); Создает рисунок из прямоугольника r графического окна.

Свойства класса Picture.

Property Width: integer; Ширина рисунка в пикселах.
Property Height: integer; Высота рисунка в пикселах.
Property Transparent: boolean; Прозрачность рисунка; прозрачный цвет задается свойством TransparentColor.
Property TransparentColor: Color; Прозрачный цвет рисунка. Должна быть установлена прозрачность Transparent = True.

Методы класса Picture.

Procedure Load(fname: string); Загружает рисунок из файла с именем fname.
Procedure Save(fname: string); Сохраняет рисунок в файл с именем fname.
Procedure SetSize(w,h: integer); Устанавливает размер рисунка w на h пикселей.
Function Intersect(p: Picture): boolean; Возвращает True, если изображение данного рисунка пересекается с изображением рисунка p, и False в противном случае. Для проверки пересечения оба объекта рисуются на белом фоне, и прямоугольник пересечения попиксельно проверяется на пересечение. К сожалению, при таком алгоритме любые белые пиксели считаются не принадлежащими объекту. Поэтому для корректной работы этого метода не следует использовать белый цвет для внутренности объекта.
Procedure Draw(x,y: integer); Выводит рисунок в позиции (x,y).
Procedure Draw(x,y: integer; g: Graphics); Выводит рисунок в позиции (x,y) на поверхность рисования g.
Procedure Draw(x,y,w,h: integer); Выводит рисунок в позиции (x,y), масштабируя его к размеру (w,h).
Procedure Draw(x,y,w,h: integer; g: Graphics); Выводит рисунок в позиции (x,y), масштабируя его к размеру (w,h), на поверхность рисования g.
Procedure Draw(x,y: integer; r: System.Drawing.Rectangle); // r - part of Picture. Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y).
Procedure Draw(x,y: integer; r: System.Drawing.Rectangle; g: Graphics); Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y) на поверхность рисования g.
Procedure Draw(x,y,w,h: integer; r: System.Drawing.Rectangle); // r - part of Picture. Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y), масштабируя его к размеру (w,h).
Procedure Draw(x,y,w,h: integer; r: System.Drawing.Rectangle; g: Graphics); Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y), масштабируя его к размеру (w,h), на поверхность рисования g.
Procedure CopyRect(dst: System.Drawing.Rectangle; p: Picture; src: System.Drawing.Rectangle); Копирует прямоугольник src рисунка p в прямоугольник dst текущего рисунка.
Procedure CopyRect(dst: System.Drawing.Rectangle; bmp: Bitmap; src: System.Drawing.Rectangle); Копирует прямоугольник src битового образа bmp в прямоугольник dst текущего рисунка.
Procedure FlipHorizontal; Зеркально отображает рисунок относительно горизонтальной оси симметрии.
Procedure FlipVertical; Зеркально отображает рисунок относительно вертикальной оси симметрии.
Procedure SetPixel(x,y: integer; c: Color); Закрашивает пиксел (x,y) рисунка цветом c.
Procedure PutPixel(x,y: integer; c: Color); Закрашивает пиксел (x,y) рисунка цветом c.
Function GetPixel(x,y: integer): Color; Возвращает цвет пиксела (x,y) рисунка.
Procedure Line(x1,y1,x2,y2: integer); Выводит на рисунке отрезок от точки (x1,y1) до точки (x2,y2).
Procedure Line(x1,y1,x2,y2: integer; c: Color); Выводит на рисунке отрезок от точки (x1,y1) до точки (x2,y2) цветом c.
Procedure FillCircle(x,y,r: integer); Заполняет на рисунке внутренность окружности с центром (x,y) и радиусом r.
Procedure DrawCircle(x,y,r: integer); Выводит на рисунке окружность с центром (x,y) и радиусом r.
Procedure FillEllipse(x1,y1,x2,y2: integer); Заполняет на рисунке внутренность эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2).
Procedure DrawEllipse(x1,y1,x2,y2: integer); Выводит на рисунке границу эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2).
Procedure FillRectangle(x1,y1,x2,y2: integer); Заполняет на рисунке внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2).
Procedure FillRect(x1,y1,x2,y2: integer); Заполняет на рисунке внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2).
Procedure DrawRectangle(x1,y1,x2,y2: integer); Выводит на рисунке границу ы прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2).
Procedure Circle(x,y,r: integer); Выводит на рисунке заполненную окружность с центром (x,y) и радиусом r.
Procedure Ellipse(x1,y1,x2,y2: integer); Выводит на рисунке заполненный эллипс, ограниченный прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2).
Procedure Rectangle(x1,y1,x2,y2: integer); Выводит на рисунке заполненный прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2).
Procedure RoundRect(x1,y1,x2,y2,w,h: integer); Выводит на рисунке заполненный прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев.
Procedure Arc(x,y,r,a1,a2: integer); Выводит на рисунке дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки).
Procedure FillPie(x,y,r,a1,a2: integer); Заполняет на рисунке внутренность сектора окружности, ограниченного дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки).
Procedure DrawPie(x,y,r,a1,a2: integer); Выводит на рисунке сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки).
Procedure Pie(x,y,r,a1,a2: integer); Выводит на рисунке заполненный сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки).
Procedure DrawPolygon(points: array of Point); Выводит на рисунке замкнутую ломаную по точкам, координаты которых заданы в массиве points.
Procedure FillPolygon(points: array of Point); Заполняет на рисунке многоугольник, координаты вершин которого заданы в массиве points.
Procedure Polygon(points: array of Point); Выводит на рисунке заполненный многоугольник, координаты вершин которого заданы в массиве points.
Procedure Polyline(points: array of Point); Выводит на рисунке ломаную по точкам, координаты которых заданы в массиве points.
Procedure Curve(points: array of Point); Выводит на рисунке кривую по точкам, координаты которых заданы в массиве points.
Procedure DrawClosedCurve(points: array of Point); Выводит на рисунке замкнутую кривую по точкам, координаты которых заданы в массиве points.
Procedure FillClosedCurve(points: array of Point); Заполняет на рисунке замкнутую кривую по точкам, координаты которых заданы в массиве points.
Procedure ClosedCurve(points: array of Point); Выводит на рисунке заполненную замкнутую кривую по точкам, координаты которых заданы в массиве points.
Procedure TextOut(x,y: integer; s: string); Выводит на рисунке строку s в прямоугольник к координатами левого верхнего угла (x,y).
Procedure FloodFill(x,y: integer; c: Color); Заливает на рисунке область одного цвета цветом c, начиная с точки (x,y).
Procedure Clear; Очищает рисунок белым цветом.
Procedure Clear(c: Color); Очищает рисунок цветом c.

Подпрограммы для работы с графическим окном.

Доступ к свойствам графического окна можно осуществлять как в процедурном, так и в объектно-ориентированном стиле.

Процедуры и функции для доступа к свойствам окна сгруппированы парами: если Prop - имя свойства кисти, то функция PenProp возвращает значение этого свойства, а процедура SetPenProp(p) устанавливает это свойство:

Function WindowWidth: integer; Возвращает ширину клиентской части графического окна в пикселах.
Function WindowHeight: integer; Возвращает высоту клиентской части графического окна в пикселах.
Function WindowLeft: integer; Возвращает отступ графического окна от левого края экрана в пикселах.
Function WindowTop: integer; Возвращает отступ графического окна от верхнего края экрана в пикселах.
Function WindowIsFixedSize: boolean; Возвращает True, если графическое окно имеет фиксированный размер, и False в противном случае.
Procedure SetWindowWidth(w: integer); Устанавливает ширину клиентской части графического окна в пикселах.
Procedure SetWindowHeight(h: integer); Устанавливает высоту клиентской части графического окна в пикселах.
Procedure SetWindowLeft(l: integer); Устанавливает отступ графического окна от левого края экрана в пикселах.
Procedure SetWindowTop(t: integer); Устанавливает отступ графического окна от верхнего края экрана в пикселах.
Procedure SetWindowIsFixedSize(b: boolean); Устанавливает, имеет ли графическое окно фиксированный размер.
Function WindowCaption: string; Возвращает заголовок графического окна.
Function WindowTitle: string; Возвращает заголовок графического окна.
Procedure SetWindowCaption(s: string); Устанавливает заголовок графического окна.
Procedure SetWindowTitle(s: string); Устанавливает заголовок графического окна.
Procedure SetWindowSize(w,h: integer); Устанавливает размеры клиентской части графического окна в пикселах.
Procedure SetWindowPos(l,t: integer); Устанавливает отступ графического окна от левого верхнего края экрана в пикселах.
Procedure ClearWindow; Очищает графическое окно белым цветом.
Procedure ClearWindow(c: Color); Очищает графическое окно цветом c.
Procedure InitWindow(Left,Top,Width,Height: integer; BackColor: Color := clWhite); Устанавливает ширину и высоту клиентской части графического окна в пикселах.
Procedure SaveWindow(fname: string); Сохраняет содержимое графического окна в файл с именем fname.
Procedure LoadWindow(fname: string); Восстанавливает содержимое графического окна из файла с именем fname.
Procedure FillWindow(fname: string); Заполняет содержимое графического окна обоями из файла с именем fname.
Procedure CloseWindow; Закрывает графическое окно и завершает приложение.
Procedure CenterWindow; Центрирует графическое окно по центру экрана.
Function WindowCenter: Point; Возвращает центр графического окна.
Procedure MaximizeWindow; Максимизирует графическое окно.
Procedure MinimizeWindow; Сворачивает графическое окно.
Procedure NormalizeWindow; Возвращает графическое окно к нормальному размеру.
Кроме того, можно возвращать размеры экрана Screen, а также размеры и положение графического компонента GraphBox, на котором осуществляется рисование: function GraphBoxWidth: integer; Возвращает ширину графического компонента в пикселах (по умолчанию совпадает с WindowWidth).
Function GraphBoxHeight: integer; Возвращает высоту графического компонента в пикселах (по умолчанию совпадает с WindowHeight).
Function GraphBoxLeft: integer; Возвращает отступ графического компонента от левого края окна в пикселах.
Function GraphBoxTop: integer; Возвращает отступ графического компонента от верхнего края окна в пикселах.
Function ScreenWidth: integer; Возвращает ширину экрана в пикселях.
Function ScreenHeight: integer; Возвращает высоту экрана в пикселях.

Можно также изменять свойства графического окна через объект Window.

Класс GraphABCWindow графического окна.

Класс GraphABCWindow представляет собой графическое окно. Функция.

Function Window: GraphABCWindow;

Возвращает объект текущего графического окна.

Свойства класса GraphABCWindow.

Property Left: integer; Отступ графического окна от левого края экрана в пикселах.
Property Top: integer; Отступ графического окна от верхнего края экрана в пикселах.
Property Width: integer; Ширина клиентской части графического окна в пикселах.
Property Height: integer; Высота клиентской части графического окна в пикселах.
Property Caption: string; Заголовок графического окна.
Property Title: string; Заголовок графического окна.
Property IsFixedSize: boolean; Имеет ли графическое окно фиксированный размер.

Методы класса GraphABCWindow.

Procedure Clear; Очищает графическое окно белым цветом.
Procedure Clear(c: Color); Очищает графическое окно цветом c.
Procedure SetSize(w,h: integer); Устанавливает размеры клиентской части графического окна в пикселах.
Procedure SetPos(l,t: integer); Устанавливает отступ графического окна от левого верхнего края экрана в пикселах.
Procedure Init(Left,Top,Width,Height: integer; BackColor: Color := clWhite); Устанавливает положение, размеры и цвет графического окна.
Procedure Save(fname: string); Сохраняет содержимое графического окна в файл с именем fname.
Procedure Load(fname: string); Восстанавливает содержимое графического окна из файла с именем fname.
Procedure Fill(fname: string); Заполняет содержимое графического окна обоями из файла с именем fname.
Procedure Close; Закрывает графическое окно и завершает приложение.
Procedure Minimize; Сворачивает графическое окно.
Procedure Maximize; Максимизирует графическое окно.
Procedure Normalize; Возвращает графическое окно к нормальному размеру.
Procedure CenterOnScreen; Центрирует графическое окно по центру экрана.
Function Center: Point; Возвращает центр графического окна.

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

Подпрограммы для работы с координатами графического окна.

Доступ к свойствам координат графического окна можно осуществлять как в процедурном, так и в объектно-ориентированном стиле.

Процедуры и функции для изменения системы координат окна приведены ниже:

Procedure SetCoordinateOrigin(x0,y0: integer); Устанавливает начало координат в точку (x0,y0).
Procedure SetCoordinateScale(sx,sy: real); Устанавливает масштаб системы координат.
Procedure SetCoordinateAngle(a: real); Устанавливает поворот системы координат.

Можно также изменять свойства системы координат графического окна через объект Coordinate.

Класс GraphABCCoordinate графического окна.

Объект текущей системы координат возвращается функцией Coordinate и имеет тип GraphABCCoordinate:

Function Coordinate: GraphABCCoordinate;

Класс GraphABCCoordinate представляет тип системы координат для графического окна.

Свойства класса GraphABCCoordinate.

Property OriginX: integer; X-координата начала координат относительно левого верхнего угла окна.
Property OriginY: integer; Y-координата начала координат относительно левого верхнего угла окна.
Property Origin: Point; Координаты начала координат относительно левого верхнего угла окна.
Property Angle: real; Угол поворота системы координат.
Property ScaleX: real; Масштаб системы координат по оси X.
Property ScaleY: real; Масштаб системы координат по оси Y.
Property Scale: real; Масштаб системы координат по обоим осям.
Property Matrix: System.Drawing.Drawing2D.Matrix; Матрица 3x3 преобразований координат.

Методы класса GraphABCCoordinate.

Procedure SetTransform(x0,y0,angle,sx,sy: real); Устанавливает параметры системы координат.
Procedure SetOrigin(x0,y0: integer); Устанавливает начало системы координат.
Procedure SetScale(sx,sy: real); Устанавливает масштаб системы координат.
Procedure SetScale(scale: real); Устанавливает масштаб системы координат.
Procedure SetMathematic; Устанавливает правую систему координат (ось OY направлена вверх, ось OX - вправо).
Procedure SetStandard; Устанавливает левую систему координат (ось OY направлена вниз, ось OX - вправо).

Кроме того, можно изменять свойства системы координат, используя соответствующие процедуры и функции.

Подпрограммы блокировки рисования.

Procedure Redraw;

Перерисовывает содержимое графического окна. Вызывается в паре с LockDrawing.
Procedure LockDrawing; Блокирует рисование на графическом окне. Перерисовка графического окна выполняется с помощью Redraw.
Procedure UnlockDrawing; Снимает блокировку рисования на графическом окне и осуществляет его перерисовку.

Блокировка вывода в графическое окно LockDrawing с последующим вызовом Redraw используется для простейшего создания анимации без мерцания.

Пример. Анимация без мерцания.

Подпрограммы режимов рисования.

Procedure SetSmoothing(sm: boolean);

Устанавливает режим сглаживания.
Procedure SetSmoothingOn; Включает режим сглаживания.
Procedure SetSmoothingOff; Выключает режим сглаживания.
Function SmoothingIsOn: boolean; Возвращает True, если режим сглаживания установлен.
Procedure SetCoordinateOrigin(x0,y0: integer); Устанавливает начало координат в точку (x0,y0).

События модуля GraphABC.

Графическая программа продолжает выполняться даже после того как выполнены все операторы основной программы. Графическое окно реагирует на события мыши, клавиатуры, событие изменения размеров окна и событие закрытия окна. Данные события определены в модуле GraphABC и представляют собой процедурные переменные:

OnMouseDown: procedure (x,y,mousebutton: integer); Событие нажатия на кнопку мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 1, если нажата левая кнопка мыши, и 2, если нажата правая кнопка мыши.
OnMouseUp: procedure (x,y,mousebutton: integer); Событие отжатия кнопки мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 1, если отжата левая кнопка мыши, и 2, если отжата правая кнопка мыши.
OnMouseMove: procedure (x,y,mousebutton: integer); Событие перемещения мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 0, если кнопка мыши не нажата, 1, если нажата левая кнопка мыши, и 2, если нажата правая кнопка мыши.
OnKeyDown: procedure (key: integer); Событие нажатия клавиши. key - виртуальный код нажатой клавиши.
OnKeyUp: procedure (key: integer); Событие отжатия клавиши. key - виртуальный код отжатой клавиши.
OnKeyPress: procedure (ch: char); Событие нажатия символьной клавиши. ch - символ, генерируемый нажатой символьной клавишей.
OnResize: procedure; Событие изменения размера графического окна.
OnClose: procedure; Событие закрытия графического окна.

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

Параметры x и y в обработчиках OnMouseDown, OnMouseUp и OnMouseMove определяют координаты курсора мыши в момент наступления события, параметр mousebutton равен 0, если кнопка мыши не нажата, 1, если нажата левая кнопка мыши, и 2, если нажата правая кнопка мыши. Параметр key в обработчиках OnKeyDown и OnKeyUp определяет виртуальный код нажатой клавиши. Параметр ch в обработчике OnKeyPress определяет нажатый символ.

Пример 1. Рисование мышью в окне.

Пример 2. Перемещение окна с помощью клавиатуры.

Виртуальные коды клавиш.

VK_Left.

VK_Up. VK_Right.
VK_Down. VK_PageUp. VK_PageDown.
VK_Prior. VK_Next. VK_Home.
VK_End. VK_Insert. VK_Delete.
VK_Enter. VK_Return. VK_Back.
VK_Tab. VK_ShiftKey. VK_ControlKey.
VK_F1. VK_F2. VK_F3.
VK_F4. VK_F5. VK_F6.
VK_F7. VK_F8. VK_F9.
VK_F10. VK_F11. VK_F12.
VK_Menu. VK_Pause. VK_CapsLock.
VK_Capital. VK_PrintScreen. VK_Help.
VK_Space. VK_A. VK_B.
VK_C. VK_D. VK_E.
VK_F. VK_G. VK_H.
VK_I. VK_J. VK_K.
VK_L. VK_M. VK_N.
VK_O. VK_P. VK_Q.
VK_R. VK_S. VK_T.
VK_U. VK_V. VK_W.
VK_X. VK_Y. VK_Z.
VK_LWin. VK_RWin. VK_Apps.
VK_Sleep. VK_LineFeed. VK_NumPad0.
VK_NumPad1. VK_NumPad2. VK_NumPad3.
VK_NumPad4. VK_NumPad5. VK_NumPad6.
VK_NumPad7. VK_NumPad8. VK_NumPad9.
VK_Multiply. VK_Add. VK_Separator.
VK_Subtract. VK_Decimal. VK_Divide.
VK_NumLock. VK_Scroll. VK_LShiftKey.
VK_RShiftKey. VK_LControlKey. VK_RControlKey.
VK_LMenu. VK_RMenu. VK_KeyCode.
VK_Shift. VK_Control. VK_Alt.
VK_Modifiers. VK_Select. VK_Print.
VK_Snapshot.