ќбъ¤вление |
ќписание |
|
”дал¤ет из списка все пустые (Nil) указатели |
|
”дал¤ет из списка указатель Item |
|
-ортирует элементы списка |
ѕример использовани¤ списка указателей
-ассмотрим использование списков указателей на примере приложени¤ DemoList. ѕри щелчке мышью на форме приложени¤ отображаетс¤ точка, которой присваиваетс¤ пор¤дковый номер. ќдновременно координаты и номер точки записываютс¤ в соответствующие свойства создаваемого экземпл¤ра класса TMyPixel. ”казатель на этот объект передаетс¤ в новый элемент списка pixList.
¬ результате после очистки формы всю последовательность точек можно восстановить, использовав указатели на объекты точек из списка.
-писок точек можно отсортировать по координате X в пор¤дке возрастани¤.
fЧДЩ,.....Щ,,..Д^ Ч ...,.Д..1;..,,,,.,,^
}Ћистинг7:1:.ћ6дуль^главнрйс|юрм с' о \
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: TDbject) ;
procedureclearBtnClick(Sender: TDbject) ;
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; irrplerrentat ion {$R * .DFM}
const PixColor = clRed;
varCurPixel: TM/Pixel;
constructor TMyPixel. create (X, Y, Num: Integer);
begin
inherited Create;
EX := 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: TM/Pixel;
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;
procedure TMainForm.FormClose(Sender: TObject;
var Action: TCloseAction) ;
begin
PixList.Free;
end;
procedure TMainForm. FormMouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin
PixList.Add(TMyPixel.Create(X, Y, PixNum));
Inc(PixNum) ;
end;
procedure TMainForm.ListBtnClick(Sender: TObject) ;
var i: Integer;
begin with PixList do for i := 0 to Count Ч 1 do
begin
CurPixel := Items [i] ;
CurPixel.SetPixel ;
end;
end;