我的主程序可以动态调用若干个Tframe窗口,这我想是DELPHI的特色。
现在问题是:当我动态调用后,却不能外部访问TFRAME里面的东西,所有的事件全部要在TFRAME本身完成,这样就很头疼。例如我的TFRAME里有个TREEVIEW,我想弹出个窗口动态增加TREVIEW节点,但是连TREEVIEW都访问不了。原因我知道,因为我的TFRAME是动态产生的,如果是静态的话应该没有问题。以上现象各位有没有遇到过?如果有解决方法,更高的分送上

解决方案 »

  1.   

    动态产生Tfame应该有个模板!把要编的动西先在那模板里编号!然后在主窗体里创建他!行吗!
      

  2.   

    你在设计Frame的时候,已知那个TREEVIEW是动态创建的,你想要在别的地方访问那个listview,你可以将TREEVIEW声明在public域中
      

  3.   

    楼上没有理解题意:整个FRAME是动态创建的,即对于新创建的这个类实例,如何来访问它?
      

  4.   

    调用:  
    public
         frame1:tframe;

        frame1:=p_type.TFrame_PType.Create(self);现在我新弹出个窗口,要访问frame1.treeview,该如何?
      

  5.   

    什么意思?你frame1在public定义的啊,直接访问不行?mainform.frame1.treeview
      

  6.   

    如果你实在不行就在FRAME里面写个过程在调用的单元里有过程指针去调用。
      

  7.   

    不要把Frame1
    声明在函数区,你这样没有释放是有内存泄漏的
    要这样Tform1 = class...public
       Frame1:TFrame;procedure GenerateFrame;
    begin
      Frame1 := Tframe.Create...
    end;这样你才能通过Form1.Frame1来访问
    end;
      

  8.   

    别忘了,override Form的Destroy.或者在onDestroy中加入
    FreeAndnil(Frame1)
      

  9.   

    首先更正楼主一个概念:主程序可以动态调用若干个Tframe窗口,这我想是DELPHI的特色。这个跟delphi没啥关系,所有的OOP语言都能轻松办到,
    XXX只有delphi才能办到
    这样话以后别出去乱说,否则让其他语言的兄弟笑话:)其次,没看懂你说的问题到底啥意思?反正我是没遇见过
    还是把你的代码贴出来吧,问题还是应该在自已身上想想就行了,既然是常见的,又怎么会是高难度呢,呵呵
      

  10.   

    谢谢楼上理解我描述的情况。不过,要申明成自定义FRAME才可以访问:
    *************************
    错误:
    public
         frame1:tframe;

        frame1:=p_type.TFrame_PType.Create(self);
    调用:
    MainForm.frame1.(这样是没有对象的)
    *************************************
    *************************
    正确:
    public
         frame1:p_type.TFrame_PType;

        frame1:=p_type.TFrame_PType.Create(self);
    调用:
    MainForm.frame1.treeview1.selected.text:='aaaa';*************************************
    可是我又想只定义一个frame1对象,便于所有的不同FRAME用一个对象来生成和释放;如果不同的FRAME指定不同的申明对象,那样的话释放好麻烦啊!
    我想能否通过指针来访问这个FRAME1对象就好了。
      

  11.   

    以下是主要代码:
    1、主窗口调用若干frame窗口通用程序:
      public
         frame1:tframe;
        procedure FreeAndNilFrame(var frameFlag:Tframe;flag:integer);{ Public declarations }
      end;procedure TFrm_Main.FreeAndNilFrame(var frameFlag:Tframe;flag:integer);
    beginif  assigned(frameFlag) then
     freeandnil(frameflag) ; if flag=1 then   //打开类别
      frameFlag:= p_type.TFrame_PType.Create(self)
     else if flag=2 then  //打开产品管理
       frameFlag:= p_name.TF_pname.Create(self) ; frameFlag.Parent:=self;
       frameFlag.Top :=Frm_Main.Panel1.Top ;end;那么以上主窗口的frame1中的的控件对象,如treeview,litview..该如何在另外一个窗口中访问?
      

  12.   

    可是我又想只定义一个frame1对象,便于所有的不同FRAME用一个对象来生成和释放;如果不同的FRAME指定不同的申明对象,那样的话释放好麻烦啊!
    我想能否通过指针来访问这个FRAME1对象就好了。
    啥意思啊?你把对象跟类混淆了吧?
    frame1在这里只是一个TFrame_PType的对象罢了
    其他的FRAME可以也是TFrame_PType的对象
    他们和frame1是平级的你是这个意思吧?
      

  13.   

    动态创建很多窗口,你是想做类似MDI文本编辑器的东西?
    SYNEDIT的例子中有一个和这个类似,体系搭得比较不错。有空可以去看看
      

  14.   

    frame1:tframe;
    你这样定义的只是一个Tframe的对象阿
    创建完了后上面什么都没有如果treeview,litview在Tframe1
    你的对象应该这么定义frame1:tframe1;阿
    Frame其实就是一种基类窗体的实现方法
    好好看看生成的代码吧
    他们之间的关系就清楚了