• 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;

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

  • 相关阅读:
    UIViewController生命周期
    NSTImer重复执行任务
    IOS平台汉字转拼音方案
    @properties指针说明
    自定义yum仓库
    man手册、zip备份
    ln 软连接与硬连接
    fdisk分区规划和添加wap交换空间
    window部署ftp服务器
    配置附加权限和LDAP
  • 原文地址:https://www.cnblogs.com/GameDelphi/p/2363481.html
Copyright © 2020-2023  润新知