TTreeView的使用
2007-05-31 19:39 | Filed Under Delphi |
先说一下我要达到的目的,一个Form分成两个Panel,左边放置TTreeView,右边根据TTreeView的不同选择切换不同的Frame或Form。
首先定义一个数据结构来保存每一个TTreeNode的数据,可以根据需要放更多的数据进去:
unit TreeNodeDataUnit;
interface
uses
Classes;
type
TreeNodeData = Record
id: Int64;
InstanceClass: TComponentClass;
end;
implementation
end.
其中InstanceClass字段用来保存每个TTreeNode所对应的Frame或Form。
以如下定义为例:
type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
TreeView1: TTreeView;
procedure FormCreate(Sender: TObject);
procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
private
{ Private declarations }
public
{ Public declarations }
end;
开始创建TTreeView,在Form的OnCreate中创建:
procedure TForm1.FormCreate(Sender: TObject);
var
items: TTreeNodes;
mainNode, subNode: TTreeNode;
nodeData: ^TreeNodeData;
begin
items := TreeView1.Items;
mainNode := items.Add(nil, 'Root');
New(nodeData);
nodeData^.id := 100;
mainNode.Data := nodeData;
subNode := items.AddChild(mainNode, 'Node1');
New(nodeData);
nodeData^.id := 100100;
nodeData^.InstanceClass := TFrame1;
subNode.Data := nodeData;
subNode := items.AddChild(mainNode, 'Node2');
New(nodeData);
nodeData^.id := 100200;
nodeData^.InstanceClass := TFrame2;
subNode.Data := nodeData;
TreeView1.FullExpand;
end;
响应TTreeView的OnChange事件,根据每个TTreeNode的Data定义显示不同的Frame或Form:
var
currFrame: TForm;
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
var
nodeData: ^TreeNodeData;
begin
nodeData := Node.Data;
//ShowMessage(intToStr(nodeData^.id));
if (nodeData^.InstanceClass <> nil) then begin
if (currFrame <> nil) and not (currFrame is nodeData^.InstanceClass) then begin
currFrame.Free();
currFrame := nil;
end;
if (currFrame = nil) then begin
Application.CreateForm(nodeData^.InstanceClass, currFrame);
currFrame.Parent := Panel2;
currFrame.Align := alClient;
currFrame.Show;
end;
end;
end;
这样当需要添加新的Node时只需要更改很少的代码。
PS:相比于在Design视图上点来点去,还是更喜欢自己写代码来实现……
标签:Delphi, TTreeNode, TTreeView相关日志 随机文章
Comments
Leave a Reply

