CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

如何将一个窗体封装成PANEL

楼主liuqifeiyu(liuqi)2006-12-04 13:47:09 在 Delphi / VCL组件开发及应用 提问

我有一个能实现一定功能的窗体,现在想把它封装成一个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窗体里的控件的属性  
   
  不知道这样封装对不对?有知道的指教一二!  
  严重感谢!!! 问题点数:140、回复次数:35Top

1 楼mdejtod(稻草人)回复于 2006-12-04 13:55:19 得分 0

帮顶一下,偶不知道~Top

2 楼maozefa(阿发伯)回复于 2006-12-04 13:56:13 得分 0

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

3 楼maozefa(阿发伯)回复于 2006-12-04 13:57:00 得分 0

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

4 楼maozefa(阿发伯)回复于 2006-12-04 13:57:55 得分 0

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

5 楼sxqwhxq(步青云)回复于 2006-12-04 15:14:26 得分 0

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

6 楼liuqifeiyu(liuqi)回复于 2006-12-04 15:32:43 得分 0

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

7 楼sxqwhxq(步青云)回复于 2006-12-04 15:38:00 得分 0

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

8 楼SmallMaker(小人物)回复于 2006-12-05 13:15:26 得分 0

用TframeTop

9 楼liuqifeiyu(liuqi)回复于 2006-12-06 11:46:53 得分 0

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

10 楼liuqifeiyu(liuqi)回复于 2006-12-07 12:17:53 得分 0

有知道的吗?  
  别沉了啊!Top

11 楼sanmaotuo(老冯)回复于 2006-12-07 13:06:10 得分 0

可以的.没有问题Top

12 楼maozefa(阿发伯)回复于 2006-12-07 13:57:55 得分 0

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

13 楼sanmaotuo(老冯)回复于 2006-12-07 14:00:34 得分 0

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;  
   
  Top

14 楼maozefa(阿发伯)回复于 2006-12-07 14:09:47 得分 0

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

15 楼sanmaotuo(老冯)回复于 2006-12-07 14:31:59 得分 0

先注销,再登录时选择忘记密码应该能够搞定  
   
  -------------------谢谢大哥,弄好了  
  Top

16 楼liuqifeiyu(liuqi)回复于 2006-12-12 10:29:32 得分 0

谢谢大家,等我试试,如果可以的话,我将把这个东西公布给大家Top

17 楼liuqifeiyu(liuqi)回复于 2006-12-12 11:22:07 得分 0

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

18 楼sanmaotuo(老冯)回复于 2006-12-12 12:38:38 得分 0

没有问题的.   晚上给你完整代码.   稍等毋躁Top

19 楼sanmaotuo(老冯)回复于 2006-12-12 12:40:00 得分 0

你最好把FCellFrm给我,   我好完整测试.   sanmaotuo_33@163.comTop

20 楼liuqifeiyu(liuqi)回复于 2006-12-12 13:13:50 得分 0

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

21 楼sanmaotuo(老冯)回复于 2006-12-12 13:16:17 得分 0

我自己加吧Top

22 楼sanmaotuo(老冯)回复于 2006-12-12 18:47:25 得分 0

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

23 楼liuqifeiyu(liuqi)回复于 2006-12-13 08:27:06 得分 0

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

24 楼liuqifeiyu(liuqi)回复于 2006-12-13 09:15:39 得分 0

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

25 楼chijingde(AD)回复于 2006-12-13 09:29:49 得分 0

做成控件~!Top

26 楼liuqifeiyu(liuqi)回复于 2006-12-13 09:47:52 得分 0

我就是在做控件啊Top

27 楼sanmaotuo(老冯)回复于 2006-12-13 12:49:47 得分 0

呵呵.明白你的意思了.没有问题啦.   晚上01:00:00   给答案Top

28 楼liuqifeiyu(liuqi)回复于 2006-12-13 13:25:35 得分 0

呵呵,这么忙啊,1点还不睡觉,注意身体啊Top

29 楼extcsdn(Studing VB now)回复于 2006-12-13 13:45:11 得分 0

关注Top

30 楼savagexyz(狼雨)回复于 2006-12-13 19:56:43 得分 0

ok没,给大家共享下,兄弟学习学习Top

31 楼liuqifeiyu(liuqi)回复于 2006-12-14 08:37:44 得分 0

呵呵,还没有呢,等别人的帮忙呢Top

32 楼liuqifeiyu(liuqi)回复于 2006-12-14 12:15:37 得分 0

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

33 楼hwxnhk0326(殺殺人,灌灌水)回复于 2006-12-14 14:40:32 得分 0

GZTop

34 楼wudi_1982(向伴水学习|胃出血,住院中)回复于 2006-12-15 14:41:09 得分 0

这热闹。Top

35 楼Delphi1985(Darkhorse)回复于 2006-12-19 16:34:17 得分 0

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

相关问题

关键词

得分解答快速导航

  • 帖主:liuqifeiyu

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo