TList类型的应用

这个TList类型在编程里面经常使用到。

先看万一的测试:http://www.cnblogs.com/del/archive/2007/12/29/1019566.html

// Add、Count、Items[n]
var
List: TList; {声明 List}
frmRed: TForm; {用于测试的对象, 这里选择了窗体}
begin
List := TList.Create; {建立列表}

frmRed := TForm.Create(nil); {建立 frmRed}
frmRed.Caption := 'Red'; {frmRed 标题}
frmRed.Color := clRed; {frmRed 颜色}

List.Add(frmRed); {添加到列表}

ShowMessage(IntToStr(List.Count)); {1; 列表元素总数}
//TForm(List.Items[0]).ShowModal; {调用对象}
TForm(List[0]).ShowModal; {调用对象, 比上一行的写法简洁, 但是一样的}

frmRed.Free;
List.Free;
end;
--------------------------------------------------------------------------------

// Insert、Remove、Delete、Clear、First、Last
var
List: TList;
frmRed,frmGreen,frmBlue: TForm;
i: Integer;
begin
List := TList.Create;

{建立两个窗体: 红色、绿色}
frmRed := TForm.Create(nil);
frmRed.Caption := 'Red';
frmRed.Color := clRed;

frmGreen := TForm.Create(nil);
frmGreen.Caption := 'Green';
frmGreen.Color := clGreen;

{添加到 List}
List.Add(frmRed);
List.Add(frmGreen);


{再建立一个蓝色窗体}
frmBlue := TForm.Create(nil);
frmBlue.Caption := 'Blue';
frmBlue.Color := clBlue;

{插入到 List}
List.Insert(0, frmBlue);

ShowMessage(IntToStr(List.Count)); {3}
TForm(List.First).ShowModal; {显示第一个: 蓝色窗体}
TForm(List.Last).ShowModal; {显示最后一个: 绿色窗体}


{看看红色窗体是第几个?}
i := List.IndexOf(frmRed);
ShowMessage(IntToStr(i)); {1; 是第二个}


{从列表中删除 - 用对象指针}
List.Remove(frmRed);
ShowMessage(IntToStr(List.Count)); {2}
frmRed.ShowModal; {frmRed 依然存在, 只是不在列表中了}


{从列表中删除 - 用元素索引}
List.Delete(0);
frmBlue.ShowModal; {frmBlue 依然存在, 只是不在列表中了}

{清空列表}
List.Clear;

frmRed.Free;
frmGreen.Free;
frmBlue.Free;
List.Free;
end;
--------------------------------------------------------------------------------

// Capacity、Move、Exchange、Extract
var
List: TList;
frmRed,frmGreen,frmBlue: TForm;
p: Pointer;
i: Integer;
begin
List := TList.Create;

List.Capacity := 3; {让 List 准备好接受 3 个元素}

{建立红、绿、蓝三个窗体, 并添加到 List}
frmRed := TForm.Create(nil);
frmRed.Caption := 'Red'; frmRed.Color := clRed;
frmGreen := TForm.Create(nil);
frmGreen.Caption := 'Green'; frmGreen.Color := clGreen;
frmBlue := TForm.Create(nil);
frmBlue.Caption := 'Blue'; frmBlue.Color := clBlue;
List.Add(frmRed);
List.Add(frmGreen);
List.Add(frmBlue);

{依次显示窗体标题}
for i := 0 to List.Count - 1 do
ShowMessage(TForm(List[i]).Caption); {将分别显示: Red Green Blue}


{移动}
List.Move(2,0); {把第 3 个转移到第 1 个}
for i := 0 to List.Count - 1 do
ShowMessage(TForm(List[i]).Caption); {将分别显示: Blue Red Green}

{置换}
List.Exchange(1,2); {把第 2 个与第 3 个交换}
for i := 0 to List.Count - 1 do
ShowMessage(TForm(List[i]).Caption); {将分别显示: Blue Green Red}

{提取指针}
p := List.Extract(frmGreen);
ShowMessage(TForm(p).Caption); {Green}

frmRed.Free;
frmGreen.Free;
frmBlue.Free;
List.Free;
end;
--------------------------------------------------------------------------------

//定义排序函数
function MySort(p1, p2: Pointer): Integer;
begin
Result := AnsiStrComp(p1,p2);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
List: TList;
frmRed,frmGreen,frmBlue: TForm;
i: Integer;
begin
List := TList.Create;

{建立绿、红、蓝三个窗体, 并添加到 List}
frmRed := TForm.Create(nil);
frmRed.Caption := 'Red'; frmRed.Color := clRed;
frmGreen := TForm.Create(nil);
frmGreen.Caption := 'Green'; frmGreen.Color := clGreen;
frmBlue := TForm.Create(nil);
frmBlue.Caption := 'Blue'; frmBlue.Color := clBlue;
List.Add(frmRed);
List.Add(frmGreen);
List.Add(frmBlue);

{依次显示窗体标题}
for i := 0 to List.Count - 1 do
ShowMessage(TForm(List[i]).Caption); {将分别显示: Red Green Blue}

{排序}
List.Sort(MySort);
for i := 0 to List.Count - 1 do
ShowMessage(TForm(List[i]).Caption); {将分别显示: Blue Green Red}

// FreeAndNil(frmBlue);
// List.Pack; {这个没有测试成功! Pack 应该是清除所有已是 nil 的对象}


{释放所有对象}
for i := 0 to List.Count - 1 do
TForm(List[i]).Free;

List.Free;
end;

到底它的里面保存的是什么?对象——指针,继续。。

原文地址:https://www.cnblogs.com/GameDelphi/p/2363481.html