Параметры 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
Модуль ABCObjects
Модуль ABCObjects: обзор
Модуль ABCObjects реализует векторные графические объекты с возможностью масштабирования, наложения друг на друга, создания составных графических объектов и многократного их вложения друг в друга. Каждый векторный графический объект корректно себя перерисовывает при перемещении, изменении размеров и частичном перекрытии другими объектами.
Модуль ABCObjects предназначен для раннего обучения основам объектно-ориентированного программирования, а также для реализации графических и анимационных проектов средней сложности. Он реализован на основе модуля GraphABC.
На основе модуля ABCObjects созданы модули ABCSprites, ABCButtons, ABCChessObjects, ABCHouse, ABCRobots, ABCAdditionalObjects.
Следующие темы помогут изучить возможности модуля ABCObjects:
ABCObjects: быстрое введение
Диаграмма классов ABCObjects
Классы ObjectABC, BoundedObjectABC
Классы RectangleABC, SquareABC, EllipseABC, CircleABC, RoundRectABC, RoundSquareABC, TextABC
Классы RegularPolygonABC, StarABC
Классы PictureABC, MultiPictureABC
Мультирисунки
Классы BoardABC, ObectBoardABC
Массив графических объектов Objects
Класс ContainerABC
Контейнеры графических объектов
Переменные, процедуры и функции модуля ABCObjects
Ускорение перерисовки графических объектов
Совмещение графического вывода модулей ABCObjects и GraphABC
Диаграмма классов
На рисунке приведена диаграмма классов модуля ABCObjects.
Класс SpriteABC описан в модуле ABCSprites, однако, приведен на диаграмме как один из важнейших.
Класс ObjectABC
Класс ObjectABC является базовым классом для всех графических объектов ABCObjects. Его основными потомками, определенными в модуле ABCObjects, являются следующие классы: BoundedObjectABC, RectangleABC, SquareABC, EllipseABC, CircleABC, TextABC, RegularPolygonABC, StarABC, PictureABC, MultiPictureABC, BoardABC и ContainerABC. Класс ObjectABC - абстрактный: объекты этого класса не создаются.
Конструкторы класса ObjectABC
constructor Create(x,y,w,h: integer; cl: GColor);
Создает графический объект размера (w, h) цвета cl с координатами левого верхнего угла (x, y)
constructor Create(g: ObjectABC);
Создает графический объект - копию объекта g
Свойства класса ObjectABC
property Left: integer;
Отступ графического объекта от левого края
property Top: integer;
Отступ графического объекта от верхнего края
property Width: integer;
Ширина графического объекта
property Height: integer;
Высота графического объекта
property dx: integer;
x-координата вектора перемещения объекта при вызове метода Move. По умолчанию установлено в 0. Для неподвижных объектов может быть использовано для хранения любой дополнительной информации, связанной с объектом
property dy: integer;
y-координата вектора перемещения объекта при вызове метода Move. По умолчанию установлено в 0. Для неподвижных объектов может быть использовано для хранения любой дополнительной информации, связанной с объектом
property Center: Point;
Центр графического объекта
property Position: Point;
Левый верхний угол графического объекта
property Visible: boolean;
Видим ли графический объект
property Color: GColor;
Цвет графического объекта
property FontColor: GColor;
Цвет шрифта графического объекта
property Text: string;
Текст внутри графического объекта
property TextVisible: boolean;
Видимость текста внутри графического объекта
property TextScale: real;
Масштаб текста относительно размеров графического объекта, 0<=TextScale<=1. При TextScale=1 текст занимает всю ширину или высоту объекта. По умолчанию TextScale=0.8
property FontName: string;
Имя шрифта для вывода свойства Text
property FontStyle: FontStyleType;
Стиль шрифта для вывода свойства Text
property Number: integer;
Целое число, выводимое в центре графического объекта. Для вывода используется свойство Text
property RealNumber: real;
Вещественное число, выводимое в центре графического объекта. Для вывода используется свойство Text. Вещественное число выводится с одним знаком после десятичной точки
property Owner: ContainerABC;
Владелец графического объекта, ответственный также за перерисовку графического объекта внутри себя (по умолчанию nil)
Методы класса ObjectABC
procedure MoveTo(x,y: integer);
Перемещает левый верхний угол графического объекта к точке (x,y)
procedure MoveOn(a,b: integer);
Перемещает графический объект на вектор (a,b)
procedure Move; virtual;
Перемещает графический объект на вектор, задаваемый свойствами dx,dy
procedure Scale(f: real); virtual;
Масштабирует графический объект в f раз (f>1 - увеличение, 0<f<1 - уменьшение)
procedure ToFront;
Переносит графический объект на передний план
procedure ToBack;
Переносит графический объект на задний план
function Bounds: System.Drawing.Rectangle;
Возвращает прямоугольник, определяющий границы графического объекта
function PtInside(x,y: integer): boolean; virtual;
Возвращает True, если точка (x,y) находится внутри графического объекта, и False в противном случае
function Intersect(g: ObjectABC): boolean;
Возвращает True, если изображение данного графического объекта пересекается с изображением графического объекта g, и False в противном случае. Белый цвет считается прозрачным и не принадлежащим объекту
function IntersectRect(r: System.Drawing.Rectangle): boolean;
Возвращает True, если прямоугольник графического объекта пересекается прямоугольником r, и False в противном случае
function Clone0: ObjectABC; virtual;
Возвращает клон графического объекта
function Clone: ObjectABC;
Возвращает клон графического объекта
procedure Draw(x,y: integer; g: Graphics); virtual;
Защищенная. Не вызывается явно. Переопределяется для каждого графического класса. Рисует объект на объекте g: Graphics