Использование объектов
Для инициации динамической переменной Арр используется вызов функции New. В этом случае первым параметром указывается имя типа инициируемой переменной, а вторым осуществляется вызов метода-конструктора, который, я напомню, нужен для настройки таблицы виртуальных методов. Такой прием (распределение объектов в динамической памяти с одновременной инициацией их ТВМ) характерен для техники ООП.
Ниже приводится возможный вариант модуля GraphApp для нашей учебной программы:
Unit GraphApp; Interface Uses GraphObj; const NPoints = 100; {Количество точек} type {Объект-программа} TGraphApp = object Points: array [1..NPoints] of TPoint; {Массив точек} Line: TLine; {Линия} Rect: TRect; {Прямоугольник} Circ: TCircle; {Окружность} ActiveObj: Integer; {Активный объект} Procedure Init; Procedure Run; Procedure Done; Procedure ShowAll; Procedure MoveActiveObj (dX,dY: Integer); end; Implementation Uses Graph, CRT; Procedure TGraphApp.Init; {Инициирует графический режим работы экрана. Создает и отображает NPoints экземпляров объекта TPoint, а также экземпляры объектов TLine, TCircle и TRect} var D,R,Err,k: Integer; begin {Инициируем графику} D: = Detect; {Режим автоматического определения типа графического адаптера} InitGraph(D,R, '\tp\bgi'); {Инициируем графический режим. Текстовая строка должна задавать путь к каталогу с графическими драйверами} Err: = GraphResult; {Проверяем успех инициации графики} if Err<>0 then begin GraphErrorMsg (Err); HALT end; {Создаем точки} for k: = 1 to NPoints do Points [k].Init (Random(GetMaxX),Random(GetMaxY),Random(15)+1); {Создаем другие объекты} Line. Init (GetMaxX div 3, GetMaxY div 3.2*GetMaxX div 3, 2*GetMaxY div 3,LightRed); Circ. Init (GetMaxX div 2, GetMaxY div 2, GetMaxY div 5, White); Rect.Init(2*GetMaxX div 5.2*GetMaxY div 5, 3*GetMaxX div 5, 3*GetMaxY div 5, Yellow); ShowAll; {Показываем все графические объекты} ActiveObj: = 1 {Первым перемещаем прямоугольник} end; { TGraphApp.Init} {-----------} Procedure TGraphApp.Run; {Выбирает объект с помощью Tab и перемещает его по экрану} var Stop: Boolean; {Признак нажатия Esc} const D = 5; {Шаг смещения фигур} begin Stop: = False;