关于TForm的继承,将讨论结果整理出来了回报大家(谢谢Kingron/小雨哥/amsea/cnwinds/xianjun/balaschen/杜宝)(0分)

  • 主题发起人 主题发起人 Qingzhong
  • 开始时间 开始时间
Q

Qingzhong

Unregistered / Unconfirmed
GUEST, unregistred user!
问题:http://www.delphibbs.com/delphibbs/dispq.asp?lid=761277
http://www.delphibbs.com/delphibbs/dispq.asp?lid=761649
主题:TForm继承
目的:我的所有Form都想继承于一个我自己的TMyBaseForm,如此:要改变所有Form的字体、
图标等,实现DosKey的回车跳转,我仅仅改变一下我的自己的祖先Form---TMyBaseForm
就可以了
方案:
1、来自:杜宝/Kingron
手动法:改Form1.Pas以外,还应该改Form1.dfm(他们两位告诉光改Pas是不好使的)
2、来自:Kingron
先不管什么继承,自己New一个Form,等所有的都做好之后,利用UltraEdit的
Replace In Files的功能,一次性的把.pas中的(TForm)改成(TFrmBase),在把所有的
DFM文件中的Object .....改成Inherited .....
3、来自小雨哥:
封装一个自己的 不可视组件(lid=761277),利用该组件的Create方法
实现对其Owner的一些属性自动修改和对一些方法的转换。
ps:你开始说的是"封装一个自己的 Form 组件",我以为将Form封装为一个组件,
然后可以从面板中拖入当前的Form,这在Delphi中我试了,做不到,所以才会
问你自己做过吗,可能是我理解有误,应理解为后来你实现了的一个放到
Form上的不不可视组件。
ps: I'm Sorry!
4、来自amsea
修改VCL对TForm的定义
5、来自:cnwinds/balaschen/yherxl
将自己的表单基本类加入当前工程,然后File=>New=>Other=>Project
=>选择表单基本类,并选择下方的inherit=>OK
xianjun进一步补充:
如果你的工程中有很多FORM,可能你要找到MyBaseForm都比较烦
这时就把Dpr中的其他FORM去掉,只剩MainForm与MyBaseForm就行了
6、我的方法:来自Qingzhong(欺骗法)
思考了一夜之后:
1)先建立我的表单基本类TMyBaseForm
2)再建立我的临时表单子类TMyTempForm(=Class(TMyBaseForm)),
然后使用Add to Repository加入到模板中,
并设为默认New Form(选上复选框New Form)
3)以后你可以通过File=>New=>Form,或者快捷图标New Form两种等任一方式
新建表单,等到的结果为:
TMyBaseForm1=class(TMyBaseForm) //这正是我所要的
因为Delphi默认为Copy,而不是Inherit,
但它拷贝的却恰恰是我继承来的临时表单子类TMyTempForm。
优点:不需要File=>New=>Other=>选模板表单并选下面的Inherit=>Ok
直接按New Form快捷按钮就可以了,真爽!
扩展:利用一个以色列人的DosMove组件为原型,实现了回车跳转、去掉Beep.以后所有
的表单再也不需要考虑这些问题,真爽!

后记:肯思考,就有回报。
 
谢谢,向你学习
 
还有一个补充,最后的方法如果是要继承有可视组件的Form,载设计期时看不到组件,
最简单的方法就是->见一个BaseForm->add to responxxx->inherited一个BaseForm,它会
自动修改.frm文件,使得设计期也可以看到可视组件->把inherited来的这个Form add to
responxxx设为默认Form,就一切OK了。
 
我碰到了一个问题,例如建立TMyForm = Class(TForm),其中有一个published的属性,
加入Responsitory后inherit一个MyForm1,发现新的属性并不能在属性编辑器上面看见,
怎么解决?
 
kindly的说法实质上就是我的做法(方案6),可能是我没有表述清楚。
 
接受答案了.
 
后退
顶部