我有一个能实现一定功能的窗体,现在想把它封装成一个PANEL类.
我是这样实现的:
1.继承一个PANEL:
  TCellPanel=Class(TPanel)
2.重载了CREATE:
  Constructor TCellPanel.Create(Aowner:Tcomponent);
  begin
    Inherited Create(Aowner);
    FCellFrm:=TCellFrm.Create(Self);
    FCellFrm.parent:=Self;
    FCellFrm.show;//当加上这句的时候有错误
  end;3.发布一些属性控制FCellFrm窗体里的控件的属性不知道这样封装对不对?有知道的指教一二!
严重感谢!!!

解决方案 »

  1.   

    FCellFrm:=TCellFrm.Create(Self);
        FCellFrm.parent:=Self;
    拥有者和父都不正确
      

  2.   

    FCellFrm:=TCellFrm.Create(Application);
        FCellFrm.parent:=Self.Parent;
      

  3.   

    FCellFrm:=TCellFrm.Create(Application);
    //    FCellFrm.parent:=Self.Parent;错误,不要设父
      

  4.   


     FCellFrm.parent:=Self;
     FCellFrm.show;
    这些语句都应该是运行期由组件的用户指定,不应该在设计期就指定。
      

  5.   

    谢谢大家支持!
    我要的效果是让FCellFrm窗体在设计的时候就显示在TCellPanel里,然后通过TCellPanel设计的属性来控制FCellFrm.
    其实我封装的窗体就是用友的Cell组件Delphi Demo所演示的Cell功能!大家帮忙看看有什么办法可以搞定它,谢谢!
      

  6.   

    只要是控件(从Twincontrol)而不是组件(从TComponent)继承就可在设计时显示
      

  7.   

    TCellFrm窗体上有几个控件只能放到TForm上,不能改成Tframe.
    怎么办啊?
      

  8.   

    to sanmaotuo(老冯) 密码搞定了吗?
      

  9.   

    to sanmaotuo(老冯) 密码搞定了吗?---------------------谢谢大哥, 还没有呢.type
      TFormPanel = class(TPanel)
      private
        FForm: TForm;
      protected
        procedure SetParent(AParent: TWinControl); override; //注意
      public
      end;  TFormDemo = class(TForm)
        ButtonAdd: TButton;
        procedure ButtonAddClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      FormDemo: TFormDemo;implementation{$R *.dfm}{ TFormPanel }procedure TFormPanel.SetParent(AParent: TWinControl);
    begin
      inherited;
      if FForm = nil then
      begin
        FForm := TForm.Create(nil);
        FForm.Parent := Self;
        FForm.Align := alClient;
        FForm.Caption := 'My FormPanel';
        FForm.Visible := True;
      end;
    end;procedure TFormDemo.ButtonAddClick(Sender: TObject);
    begin
      with TFormPanel.Create(Self) do
      begin
        Parent := Self;
        Visible := True;
        Align := alLeft;
        Width := 400;
      end;
    end;
      

  10.   

    to sanmaotuo(老冯)
    先注销,再登录时选择忘记密码应该能够搞定
      

  11.   

    谢谢  sanmaotuo(老冯)我试过了,你的是在运行时可以显示,我想要的是在设计时就让一个窗体在PANEL里显示.现在的问题是如果设计时不显示的话,FCellFrm窗体的属性可以访问,当访问FCellFrm的控件的时候报错.帮忙看看怎么解决一下?谢谢
      

  12.   

    你最好把FCellFrm给我, 我好完整测试. [email protected]
      

  13.   

    谢谢,也可以发到
    我用到了几个三方控件,如果你不嫌安装麻烦我就发给你.
    如果需要的话就留言!
    其实就是在CellFrm里放了别的按钮三方控件等东西,希望通过TCellPanel来访问控制.
      

  14.   

    现在的问题是如果设计时不显示的话,FCellFrm窗体的属性可以访问,当访问FCellFrm的控件的时候报错.------------------测试了,没有问题.运行时访问Form上的任何组件的任何Public和Published属性\方法\事件
      

  15.   

    呵呵,大哥,我是在设计时就要访问Form上的任何组件的任何Public和Published属性\方法\事件
      

  16.   

    sanmaotuo(老冯) 
    帮帮忙吧,看看怎么解决一下?
      

  17.   

    问题将就着解决了,关键是在设计的时候不能在PANEL里显示窗体,不能直观的看到封装窗体里控件的状态,还差点别的,等完成了在共享给大家
      

  18.   

    请教各位大家,在设计时双击一个控件图标就进入一个窗体设计器是怎么实现的啊?
    就像FastReport控件一样,双击他就进入了报表设计器窗口.