Пример использования списка указателей
Рассмотрим использование списков указателей на примере приложения DemoList. При щелчке мышью на форме приложения отображается точка, которой присваивается порядковый номер. Одновременно координаты и номер точки записываются в соответствующие свойства создаваемого экземпляра класса TMypixel. Указатель на этот объект передается в новый элемент списка pixList.
В результате после очистки формы всю последовательность точек можно восстановить, использовав указатели на объекты точек из списка.
Список точек можно отсортировать по координате X в порядке возрастания.
Листинг 7.1. Модуль главной формы проекта DemoList.
unit Main; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCTRLs, Buttons; type TMainForm = class(TForm) ListBtn: TBitBtn; ClearBtn: TBitBtn; DelBtn: TBitBtn; SortBtn: TBitBtn; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormMouseDown(Sender: TObject; Button: TMouseButton; SHIFT: TSHIFTState; X, Y: Integer); procedure ListBtnClick(Sender: TObject); procedure ClearBtnClick(Sender: TObject); procedure DelBtnClick(Sender: TObject); procedure SortBtnClick(Sender: TObject); private PixList: TList; PixNum: Integer; public { Public declarations } end; TMyPixel = class(TObject) FX: Integer; FY: Integer; FText: Integer; constructor Create(X, Y, Num: Integer); procedure SetPixel; end; var MainForm: TMainForm; implementation {$R *.DFM} const PixColor = clRed; var CurPixel: TMyPixel; constructor TMyPixel.Create(X, Y, Num: Integer); begin inherited Create; FX: = X; FY: = Y; FText: = Num; SetPixel; end; procedure TMyPixel.SetPixel; begin MainForm.Canvas.PolyLine([Point(FX, FY), Point(FX, FY)]); MainForm.Canvas.TextOut(FX +1, FY + 1, IntToStr(FText)); end; function PixCompare(Iteml, Item2: Pointer): Integer; var Pixl, Pix2: TMyPixel; begin Pixl: = Iteml; Pix2: = Item2; Result: = Pixl.FX – Pix2.FX; end; procedure TMainForm.FormCreate(Sender: TObject); begin PixList: = TList.Create; PixNum: = 1; {Счетчик точек} Canvas.Pen.Color: = PixColor; (Цвет точки} Canvas.Pen.Width: = 3; {Размер точки} Canvas.Brush.Color: = Color; (Цвет фона текста равен цвету формы} end;