請問哪位知道VirtualStringTree 或者 VirtualDrawTreer 的用法 |
答題得分者是:chinliang
|
soulin12
一般會員 ![]() ![]() 發表:22 回覆:21 積分:8 註冊:2003-05-07 發送簡訊給我 |
|
Rain
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:236 積分:268 註冊:2003-02-17 發送簡訊給我 |
|
chinliang
一般會員 ![]() ![]() 發表:16 回覆:26 積分:13 註冊:2002-06-17 發送簡訊給我 |
不同於一般的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 發送簡訊給我 |
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 發送簡訊給我 |
|
soulin12
一般會員 ![]() ![]() 發表:22 回覆:21 積分:8 註冊:2003-05-07 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |