• 虚拟树DemosMinimal 简单的例子


    //分析虚拟树demo
    6-VirtualTreeViewVirtualTreeViewV5.3.0DemosMinimal的main.pas文件

    unit Main;
    
    // Demonstration project for TVirtualStringTree to generally show how to get started.
    // Written by Mike Lischke.
    interface
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      VirtualTrees, StdCtrls, ExtCtrls;
    type
      TMainForm = class(TForm)
        VST: TVirtualStringTree;
        ClearButton: TButton;
        AddOneButton: TButton;
        Edit1: TEdit;
        Button1: TButton;
        Label1: TLabel;
        CloseButton: TButton;
        procedure FormCreate(Sender: TObject);
        procedure ClearButtonClick(Sender: TObject);
        procedure AddButtonClick(Sender: TObject);
        procedure VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex;
          TextType: TVSTTextType; var Text: UnicodeString);
        procedure VSTFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
        procedure VSTInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode;
          var InitialStates: TVirtualNodeInitStates);
        procedure CloseButtonClick(Sender: TObject);
        procedure VSTStartDrag(Sender: TObject; var DragObject: TDragObject);
      end;
    
    var
      MainForm: TMainForm;
    //----------------------------------------------------------------------------------------------------------------------
    implementation
    {$R *.DFM}
    type
      // This is a very simple record we use to store data in the nodes.
      // Since the application is responsible to manage all data including the node's caption
      // this record can be considered as minimal requirement in all VT applications.
      // Extend it to whatever your application needs.
      PMyRec = ^TMyRec;
      TMyRec = record
        Caption: WideString;
      end;
    //----------------------------------------------------------------------------------------------------------------------
    procedure TMainForm.FormCreate(Sender: TObject);
    begin
      // We assign the OnGetText handler manually to keep the demo source code compatible
      // with older Delphi versions after using UnicodeString instead of WideString.
      VST.OnGetText := VSTGetText;
      // Let the tree know how much data space we need.
      VST.NodeDataSize := SizeOf(TMyRec); //设定一个node的内存大小,虚拟树的妙处
      // Set an initial number of nodes.
      VST.RootNodeCount := 20;
    end;
    //----------------------------------------------------------------------------------------------------------------------
    procedure TMainForm.ClearButtonClick(Sender: TObject);
    var
      Start: Cardinal;
    begin
      Screen.Cursor := crHourGlass;
      try
        Start := GetTickCount;
        VST.Clear;
        Label1.Caption := Format('Last operation duration: %d ms', [GetTickCount - Start]);
      finally
        Screen.Cursor := crDefault;
      end;
    end;
    //----------------------------------------------------------------------------------------------------------------------
    procedure TMainForm.AddButtonClick(Sender: TObject);
    var
      Count: Cardinal;
      Start: Cardinal;
    begin
      // Add some nodes to the treeview.
      Screen.Cursor := crHourGlass;
      with VST do
      try
        Start := GetTickCount;
        case (Sender as TButton).Tag of
          0: // add to root
            begin
              Count := StrToInt(Edit1.Text);
              RootNodeCount := RootNodeCount + Count;//自动改变这个属性即可
            end;
          1: // add as child
            if Assigned(FocusedNode) then
            begin
              Count := StrToInt(Edit1.Text);
              ChildCount[FocusedNode] := ChildCount[FocusedNode] + Count;
              Expanded[FocusedNode] := True;
              InvalidateToBottom(FocusedNode);//要放到后面
            end;
        end;
        Label1.Caption := Format('Last operation duration: %d ms', [GetTickCount - Start]);
      finally
        Screen.Cursor := crDefault;
      end;
    end;
    
    //----------------------------------------------------------------------------------------------------------------------
    procedure TMainForm.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex;
      TextType: TVSTTextType; var Text: UnicodeString);
    var
      Data: PMyRec;
    begin
      // A handler for the OnGetText event is always needed as it provides the tree with the string data to display.
      // Note that we are always using WideString.
      // OnGetText事件处理程序总是需要为它提供了树显示的字符串数据。
    //注意,我们总是使用WideString。
      Data := Sender.GetNodeData(Node);//虚拟树的取值
      if Assigned(Data) then
        Text := Data.Caption;
    end;
    //----------------------------------------------------------------------------------------------------------------------
    procedure TMainForm.VSTFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
    var
      Data: PMyRec;
    begin
      Data := Sender.GetNodeData(Node);
      // Explicitely free the string, the VCL cannot know that there is one but needs to free
      // it nonetheless. For more fields in such a record which must be freed use Finalize(Data^) instead touching
      // every member individually.
      ///影响自由的字符串,VCL无法知道有一个但仍然需要自由。
      //为多个字段的记录必须释放使用Finalize(数据^)而不是单独触摸每一个成员。
      Finalize(Data^);
    end;
    //----------------------------------------------------------------------------------------------------------------------
    procedure TMainForm.VSTInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode;
      var InitialStates: TVirtualNodeInitStates);
    var
      Data: PMyRec;
    begin
      with Sender do
      begin
        Data := GetNodeData(Node);
        // Construct a node caption. This event is triggered once for each node but
        // appears asynchronously, which means when the node is displayed not when it is added.
        //构造一个节点标题。这个事件触发异步为每个节点,但一旦出现,这意味着当节点添加时不显示。  每次初始化时都会给这样的值
        Data.Caption := Format('Level %d, Index %d', [GetNodeLevel(Node), Node.Index]);
      end;
    end;
    //----------------------------------------------------------------------------------------------------------------------
    procedure TMainForm.CloseButtonClick(Sender: TObject);
    begin
      Close;
    end;
    //----------------------------------------------------------------------------------------------------------------------
    procedure TMainForm.VSTStartDrag(Sender: TObject; var DragObject: TDragObject);
    begin
      DragObject := TDragObject.Create;
    end;
    //----------------------------------------------------------------------------------------------------------------------
    end.
  • 相关阅读:
    了解 NoSQL 的必读资料
    关于什么时候用assert(断言)的思考
    这次见到了一些大侠
    NetBeans 时事通讯(刊号 # 87 Jan 12, 2010)
    动态链接库dll,静态链接库lib, 导入库lib
    新女性十得 写得了代码,查得出异常
    记录系统乱谈
    新女性十得 写得了代码,查得出异常
    fullpage.js禁止滚动
    RunningMapReduceExampleTFIDF hadoopclusternet This document describes how to run the TFIDF MapReduce example against ascii books. This project is for those who wants to experiment hadoop as a skunkworks in a small cluster (110 nodes) Google Pro
  • 原文地址:https://www.cnblogs.com/rogge7/p/5753868.html
Copyright © 2020-2023  润新知