例如说现在我有个form1的窗体,有frame1和frame2两个框架结构,button1和button2两个按键。
    现在想实现如下功能:当我点击Button1时,在form1中显示frame1;点击button2时,在form1中显示frame2,并且给两个frame添加onshow控件。
    我一开始以为就像在form1中引用其他form一样,在form1中添加类似于 uses frame1,frame2这样的调用语句~但肯定是不行!
    所以我想问的问题有两个:
    1.如何在form1中调用不同frame,实现上述功能;
    2.如何给frame添加onshow事件,当不同frame显示时,在frame中显示出我想要的信息。
    这个问题这两天都一直不能解决,谢谢各位啊!

解决方案 »

  1.   

    type
      TFrame2 = class(TFrame)
        Button1: TButton;
      private
        { Private declarations }
      public
        constructor create(AOwner: TComponent);override;
        procedure test();
      end;implementation{$R *.dfm}
    constructor TFrame2.create(AOwner: TComponent);
    begin
      inherited;
      ShowMessage('test');//这个在创建FRAME时会执行相当于onCREATE事件。
    end;

    procedure TFrame2.test();
    begin
      //也可以在创建实例后调用TEST方法
    end;
    end.
      

  2.   

    implementationuses Unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var frame:TFrame2;
    begin
     frame := TFrame2.Create(self);
     frame.Name := 'testFrame';
     frame.Parent := form1;
    end;//这是在FORM1中调用的部分代码
      

  3.   

    必须将两个button设置到所有控件的上面并为可见的才行的
      

  4.   


    中间这个uses Unit2;unit2是什么?
      

  5.   

    unit2是FRAME所处的单元名称
    UNIT1是FORM1所处的单元名称
      

  6.   

    Tframe的确缺少自动的初始化和释放事件
    我是自己为Tframe增加了DoInit和OnFree事件还有一种做法:直接用Tform取代Tframe,效果一样的(只是要无边框模式)
      

  7.   

    可以动态创建与销毁然后改变Parent、Visible、Show/Hide都行
      

  8.   


    http://hi.baidu.com/power123/blog/item/71488c0e7516a3e637d12217.html
    你能帮我看看这个帖子里的方法可行吗?我刚刚这样做时在定义
    procedure    TForm1.LoadFrameByClassName(FrameClassName:    TMyFrame);   
    中它总提示 Tmyframe没有申明~那我应该在哪一步声明这个类型?
    谢谢!
      

  9.   

    用Tform代替的话我就觉得失去了frame的价值了~还是想用frame!虽然不太会~呵呵!
    可以简单地给我说下你增加的DoInit和OnFree事件吗?谢谢!
      

  10.   


    呵呵~这个说得太简单了~我才刚接触frame呢!
    能给详细点吗?谢谢!
      

  11.   


    差不多吧我觉得~一般引用的功能我应该还是清楚的!但是对于frame的引用我是真的有点糊涂了~
      

  12.   

    同学,你掉了个
    type   
           TMyFrame    =    class    of    TFrame;   
    看代码要仔细些
      

  13.   

    frame.Free;//动态销毁
    frame.Parent;//修改所属控件
    frame.Visible := false;//控制是否显示
    frame.Hide;//隐藏
    frame.Show;//显示
      

  14.   

    设置两个frame的visible为false,显示的时候设置visible为true,这样不行吗?
      

  15.   

    1. button1:  frame1.show;frame2.hide
       button2:  frame1.hide;frame2.show2.
    type
      Tframe1 = class(TFrame)
         ...
      private
        { Private declarations }
        procedure CMShowingChanged(var Message: TMessage); message CM_SHOWINGCHANGED;  ...procedure Tframe1.CMShowingChanged(var Message: TMessage);
    begin
      if Showing then
      begin
        try
          ShowMessage('frame1 show!!!!')      
        except
          Application.HandleException(Self);
        end;
      end;  inherited;
    end;