午秋的方法虽然可行,但如果节点多的时候,系统是否能允许先静态生成如此多的窗口,我的方法是 在每个节点的data中,先保存要建立窗体的name,在双击事件中生成窗体。 Tformname=class(Tobject); formname:string; end; // add node var fn:Tformname; nd:ttreenode; begin fn:=Tformname.create; fn.formname:='form_name'; nd:=treeview1.items.addchildobject(nil,'childform1',fn); end; // double click begin node:=treeview1.selected; with Tform(Tcomponent(Tformname(node.data).formname)).create(self) do begin showmodal; end; end; //以上方法没有调试,但应该是可行的。
左边 TreeView 中间 splitter 右边 是不同的窗口 树上的结点是0、1、2顺序排列的 if treeview1.items.item[0].selected then begin end else if treeview1.items.item[1].selected then begin end .......
childform1:Tchildform1;
childform2:Tchildform2;
childform3:tchildform3;begin
....
treeview1.items.addchild(nil,'childform1').data := pointer(Tchildform1.create(Self));
treeview1.items.addchild(nil,'childform2').data := pointer(Tchildform2.create(Self));
treeview1.items.addchild(nil,'childform3').data := pointer(Tchildform3.create(Self));end;然后在onchange事件里写上
TForm(Node.data).parent :=Self;
TForm(Node.data).bringtofront;// 当然,上面只是个提示,实际写代码时要改进,如窗体没必有一开始就全部初始化等等
// 所正设计思路有两个,一个就是上面,把结点的Data指向已创建好的子窗体
第二个方法就是根据结点的标志(如结点名、Tag等都可以)来判断要显示哪个窗体。
中间 splitter
右边 例如RichEdit之类的东西点中树状结构后,编写TreeViewClick事件
希望我理解得没错。呵呵!
2、右边可以使用TStringGird、TMemo、TRichEdit等控件;
3、运行中,在TreeView的节点被点击时,响应该事件,右边Tag指定的显示内容。
左边listview,右边用个pagecontorl然后再在 每一页里添加东西
现在知道一楼的方法了,谢谢了哦!!
在每个节点的data中,先保存要建立窗体的name,在双击事件中生成窗体。
Tformname=class(Tobject);
formname:string;
end;
// add node
var fn:Tformname;
nd:ttreenode;
begin
fn:=Tformname.create;
fn.formname:='form_name';
nd:=treeview1.items.addchildobject(nil,'childform1',fn);
end;
// double click
begin
node:=treeview1.selected;
with Tform(Tcomponent(Tformname(node.data).formname)).create(self) do
begin
showmodal;
end;
end;
//以上方法没有调试,但应该是可行的。
[email protected]
今天看了一下物品过去的程序,在我的回贴中说的“在TreeView建立时,用各个节点的 Tag属性保存与它相关的另外的对象的Handle或索引”应该是data属性而不是Tag属性。
另外,在左边点击树枝/数叶右边显示详细内容时,一定要作好上次显示的退场处理,否则可能引起内存泄露。
中间 splitter
右边 是不同的窗口
树上的结点是0、1、2顺序排列的
if treeview1.items.item[0].selected then
begin end
else if treeview1.items.item[1].selected then
begin end
.......
//
procedure TfrmMain.InnerShow(AForm:TForm);
begin
AForm.BorderStyle :=bsNone;
AForm.WindowState :=wsMaximized;
AForm.Parent :=pnlOwner;
AForm.Show ;
end;