線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3509
推到 Plurk!
推到 Facebook!

請問哪位知道VirtualStringTree 或者 VirtualDrawTreer 的用法

答題得分者是:chinliang
soulin12
一般會員


發表:22
回覆:21
積分:8
註冊:2003-05-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-02 15:20:23 IP:61.145.xxx.xxx 未訂閱
請問哪位知道VirtualStringTree 或者 VirtualDrawTreer 的用法
Rain
資深會員


發表:31
回覆:236
積分:268
註冊:2003-02-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-04 11:41:04 IP:220.160.xxx.xxx 未訂閱
你的VirtualStringTree和VirtualDrawTree應該指的是VirtualTreeview中的那兩個組件吧?VirtualTreeview是一個功能強大並且速度非常快的第三方元件(按照它的測試程式,每秒鐘大約可增加50萬個節點,快吧),恩,它是免費的並且開放根源程式,在它的主頁上可下載組件相關的和
chinliang
一般會員


發表:16
回覆:26
積分:13
註冊:2002-06-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-04 12:20:54 IP:61.218.xxx.xxx 未訂閱
不同於一般的TreeView,並非將資料真實存於TreeView中,請先定義欲代表TreeView資料的結構,再指定節點數,而在initNode及GetText事件中,將所定義的資料指定給Node後並顯示。 寫一個簡單範例,請參考(請再Form在放一個VirtualStringTree元件)。 unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, VirtualTrees; type TForm1 = class(TForm) VirtualStringTree1: TVirtualStringTree; procedure FormCreate(Sender: TObject); procedure VirtualStringTree1GetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString); procedure VirtualStringTree1InitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates); private { Private declarations } public { Public declarations } end; //自行定義VirtualStringTree結構 type PVSTNodeData = ^TVSTNode; TVSTNode = record //自行定義所欲存於Node的資訊,可自行增加 NDDataOne: string; NDDataTwo: string; end; var Form1: TForm1; //宣告NodeData為VirtualStringTree陣列 NodeData: array[0..9] of TVSTNode; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); var I: integer; begin //清除所有Node VirtualStringTree1.Clear; //指定VitrualStringTree有幾個Node VirtualStringTree1.RootNodeCount := 10; //將所定義的結構大小指定給VitualStringTree VirtualStringTree1.NodeDataSize := SizeOf(TVSTNode); //填入測試資料 for I := 0 to 9 do begin NodeData[I].NDDataOne := 'DataOne' IntToStr(I); NodeData[I].NDDataTwo := 'DataTwo' IntToStr(I); end; end; //在GetText中,將測試資料讀出當成CellText procedure TForm1.VirtualStringTree1GetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString); var VSTNode: PVSTNodeData; begin //將該Node資料讀出 VSTNode := Sender.GetNodeData(Node); //將資料設定為Cell的值 CellText := VSTNode.NDDataOne '-' VSTNode.NDDataTwo; end; //在InitNode事件將NodeData指定給VirtualStringTree Node procedure TForm1.VirtualStringTree1InitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates); var VSTNode: PVSTNodeData; begin VSTNode := Sender.GetNodeData(Node); VSTNode^ := NodeData[Node.Index]; end; end.
chinliang
一般會員


發表:16
回覆:26
積分:13
註冊:2002-06-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-04 12:25:36 IP:61.218.xxx.xxx 未訂閱
Sorry,放了加code標籤沒有縮排,再貼一次。    
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  VirtualTrees;    type
  TForm1 = class(TForm)
    VirtualStringTree1: TVirtualStringTree;
    procedure FormCreate(Sender: TObject);
    procedure VirtualStringTree1GetText(Sender: TBaseVirtualTree;
      Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
      var CellText: WideString);
    procedure VirtualStringTree1InitNode(Sender: TBaseVirtualTree;
      ParentNode, Node: PVirtualNode;
      var InitialStates: TVirtualNodeInitStates);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    //自行定義VirtualStringTree結構
type
  PVSTNodeData = ^TVSTNode;
  TVSTNode = record
    //自行定義所欲存於Node的資訊,可自行增加
    NDDataOne: string;
    NDDataTwo: string;
  end;    var
  Form1: TForm1;
  //宣告NodeData為VirtualStringTree陣列
  NodeData: array[0..9] of TVSTNode;    implementation    {$R *.DFM}    procedure TForm1.FormCreate(Sender: TObject);
var
  I: integer;
begin
  //清除所有Node
  VirtualStringTree1.Clear;
  //指定VitrualStringTree有幾個Node
  VirtualStringTree1.RootNodeCount := 10;
  //將所定義的結構大小指定給VitualStringTree
  VirtualStringTree1.NodeDataSize := SizeOf(TVSTNode);
  //填入測試資料
  for I := 0 to 9 do
  begin
    NodeData[I].NDDataOne := 'DataOne'   IntToStr(I);
    NodeData[I].NDDataTwo := 'DataTwo'   IntToStr(I);
  end;
end;    //在GetText中,將測試資料讀出當成CellText
procedure TForm1.VirtualStringTree1GetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: WideString);
var
 VSTNode: PVSTNodeData;
begin
   //將該Node資料讀出
   VSTNode := Sender.GetNodeData(Node);
   //將資料設定為Cell的值
   CellText := VSTNode.NDDataOne   '-'   VSTNode.NDDataTwo;
end;    //在InitNode事件將NodeData指定給VirtualStringTree Node
procedure TForm1.VirtualStringTree1InitNode(Sender: TBaseVirtualTree;
  ParentNode, Node: PVirtualNode;
  var InitialStates: TVirtualNodeInitStates);
var
  VSTNode: PVSTNodeData;
begin
  VSTNode := Sender.GetNodeData(Node);
  VSTNode^ := NodeData[Node.Index];
end;    end.    
soulin12
一般會員


發表:22
回覆:21
積分:8
註冊:2003-05-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-05 16:36:06 IP:61.145.xxx.xxx 未訂閱
謝謝兩位的熱心幫助,都想給分,但只能給一個,看來站長應該修改一下這個網站的功能才行
soulin12
一般會員


發表:22
回覆:21
積分:8
註冊:2003-05-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-08-05 16:51:26 IP:61.145.xxx.xxx 未訂閱
chinliang: 能否幫我做個DEMO,它的數據來自于一個表里面,而且每個節點前面是帶CHECKBOX的那種樣式,修改後可以存回表里,我的E-Mail: soulin@asahigrp.com 謝謝 !!!
系統時間:2024-05-15 18:56:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!