不知大家看到过这种窗口没有,一个程序的主界面分为左右两部分,中间有个滚动条可拖动。当点击界面左边的树型图节点时,界面右面会产生不同的窗口,这种调用显示窗口的方法是如何实现的,是否要用第三方控件?

解决方案 »

  1.   

    example:var
      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等都可以)来判断要显示哪个窗体。
      

  2.   

    左边 TreeView
    中间 splitter
    右边 例如RichEdit之类的东西点中树状结构后,编写TreeViewClick事件
    希望我理解得没错。呵呵!
      

  3.   

    1、在TreeView建立时,用各个节点的 Tag属性保存与它相关的另外的对象的Handle或索引;
    2、右边可以使用TStringGird、TMemo、TRichEdit等控件;
    3、运行中,在TreeView的节点被点击时,响应该事件,右边Tag指定的显示内容。
      

  4.   

    哈哈,知道了个简单的方法,以前都是用笨办法做的
    左边listview,右边用个pagecontorl然后再在 每一页里添加东西
    现在知道一楼的方法了,谢谢了哦!!
      

  5.   

    我建议你在TreeView的OnChange事件进行编程。以被选中Node的显示字符为参数建立新窗口。
      

  6.   

    午秋的方法虽然可行,但如果节点多的时候,系统是否能允许先静态生成如此多的窗口,我的方法是
    在每个节点的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;
    //以上方法没有调试,但应该是可行的。
      

  7.   

    有没有简单的实例发给我一个,谢谢。
    [email protected]
      

  8.   

    更正一下:
        今天看了一下物品过去的程序,在我的回贴中说的“在TreeView建立时,用各个节点的 Tag属性保存与它相关的另外的对象的Handle或索引”应该是data属性而不是Tag属性。
        另外,在左边点击树枝/数叶右边显示详细内容时,一定要作好上次显示的退场处理,否则可能引起内存泄露。
      

  9.   

    左边 TreeView
    中间 splitter
    右边 是不同的窗口
    树上的结点是0、1、2顺序排列的 
    if treeview1.items.item[0].selected then
      begin  end
    else if treeview1.items.item[1].selected then
      begin  end
      .......
      

  10.   

    右边弹出的窗口能不能内涵于一个Panel中??
      

  11.   

    可以的,在SHOW前设一下FORM的PARENT
    //
    procedure TfrmMain.InnerShow(AForm:TForm);
    begin
        AForm.BorderStyle :=bsNone;
        AForm.WindowState :=wsMaximized;
        AForm.Parent :=pnlOwner;
        AForm.Show ;
    end;