// 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;
TList, List.Pack 清除所有已是 nil 的對象
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
FastReport 程序員手冊
dgmars19841123
2018-08-27 17:38:30
FireMonkey的窗口Handle轉爲Windows窗口的Handle
newsxy
2018-08-27 17:20:40
Delphi XE6 學習筆記(9)手動填充ListView及ListBox
newsxy
2018-08-27 17:20:19
Delphi與VB有什麼區別?
java大豆
2018-08-27 17:20:19
Delphi XE5 將Delphi Code從WinOS 遷移到iOS與Android
newsxy
2018-08-27 17:20:07
保存流 出現錯誤:[FireDAC][Phys]-329. Cannot generate update query. WHERE condition is empty
newsxy
2018-08-27 17:20:07
用Delphi從內存流中判斷圖片格式
newsxy
2018-08-27 17:20:04
datasnap的初步
newsxy
2018-08-27 17:20:03
在 Android 的文字編輯控件 (TEdit) 中, 如何按下 Enter 就隱藏虛擬鍵盤
newsxy
2018-08-27 17:20:03
Thread: DataSnap - detect disgraceful disconnect
newsxy
2018-08-27 17:20:01
Delphi xe 下快捷使用 FastMM 的內存泄露檢測功能
newsxy
2018-08-27 17:20:01
Delphi XE7 beta1的新功能之TListView滑動刷新數據功能
newsxy
2018-08-27 17:20:00
Delphi使用AdoQuery調用Mysql存儲過程
小白2016plus
2018-08-27 16:38:49
Delphi 發佈ActiveX控件 數字簽名(轉)
小白2016plus
2018-08-27 16:38:49
C#首席設計師Anders Hejlsberg專訪
自由的企鹅
2018-08-27 16:01:10
24小時熱門文章
-
再談23種設計模式(3):行爲型模式(學習筆記)
-
Power Automate Desktop 安裝完,登錄後老是提示one driver 錯誤
-
微前端學習筆記(4):從微前端到微模塊之EMP與hel-micro方案探索
-
微前端學習筆記(1):微前端總體架構概述,從微服務發微
-
985 碩士程序員,空窗 4 個月沒有 Offer!
-
一文搞懂 Spring 循環依賴
-
賽博鬥地主——使用大語言模型扮演Agent智能體玩牌類遊戲。
-
VScode右鍵打開(添加到右鍵)
-
記一次 .NET某工控視覺自動化系統 卡死分析
-
WindowsServer--SQL Server搭建主從同步實現讀寫分離 - 事務性分發