先谢谢你了:关于TForm的继承(因为我不想对每一个新建的Form都去设字体、图标、DosKey模仿?) <求求你了,我已经把贴子提前了10次以上了&gt

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

Qingzhong

Unregistered / Unconfirmed
GUEST, unregistred user!
先谢谢你了:关于TForm的继承(因为我不想对每一个新建的Form都去设字体、图标、DosKey模仿?) <求求你了,我已经把贴子提前了10次以上了> (100分)<br /> 我的所有Form都想继承于一个我自己的TMyBaseForm,如此:要改变所有Form的字体、
图标等,实现DosKey的回车跳转,我仅仅改变一下我的自己的祖先Form---TMyBaseForm
就可以了,试问怎么实现?
See Also: http://www.delphibbs.com/delphibbs/dispq.asp?lid=761277
>>来自于ddev:
>>继承!!!
>>别忘记了这个最重要的要素。
>>作个 TForm 的派生类,然后在新建的窗体中总是从这个类派生,
>>一切问题不都解决了吗?
我当然知道
TMyBaseForm = class(TForm) // 我的"TObject级"Form,已经做好
希望:
TMyForm1 = class(TMyBaseForm1)
TMyForm2 = class(TMyBaseForm1)
......
但问题是如何让TMyForm1, TMyForm2,....等等我所有的Form均以TMyBaseForm为父类

准备:
已经在frmMyBase.pas单元内定义了TMyBaseForm

方案1:
将自定义的TMyBaseForm加入Repository的Form页面,Title设为MyBaseForm,
并选上New Form复选框(设为New Form默认)
但是:1)每次用New Form快捷图标生成的却是
TMyBaseForm = class(TForm),显然是copy了TMyBaseForm,不符合我的要求
2)迫不得以,每次File=>New=>Other=>选Form页面=>
=>选MyBaseForm=>从Copy,Inherit,Use三个选项中选Inherit=>OK
你说烦不烦???
方案2:
手动法
1)在project的dpr文件中加入Use frmMyBase in 'frmMyBase.pas'
2)在新建的Form中Use子句中加入对frmMyBase的引用,然后
将TForm1=Class(TForm)人为地改为:
TForm1=Class(TMyBaseForm)
结果:检查对应的dfm, view as text 发现
object Form1: TForm1
.....
Font.Name = 'MS Sans Serif'
.....
(显然不是我要的Font, 所以判断没有真正继承TMyBaseForm)
结论:行不通
方案3:
封装一个自己的 Form 组件,如何封装?如何使用?这是小雨哥提的建议,只是
小雨哥你自己做过吗?
初步结论:行不通!


 
Delphi5.0支持窗体继承,不需要封装,如果是同一工程只要New->选择当前工程名,下面就
有本工程已有的所有窗体文件,选择你想要继承的就可以了
 
没错,在工程文件中加入父窗体,然后new,选择与项目名同名的tabsheet,就可以找到了。
 
你说的三种方法都能实现一定的继承效果:
但方法三由于直接对From进行封装,做成了组件,如果有修改,不太方便。这种组件建议
还是等父类窗体完全定型以后再做。
方法二麻烦,但是是可行的:你除了改Form1.Pas以外,还应该改Form1.dfm。
方法一是正解,必竟新那窗体的工作相比窗体设计的时间要少得多。
呵呵,你觉得麻烦,只有向Borland投诉了!
 
在另外一个贴子里面回答你了。
 
你把TMyBaseForm那个单元加到工程中
然后New -> 你的工程名 -> MyBaseForm -> 确定
就这么简单,有什么麻烦的?
当然,如果你的工程中有很多FORM,可能你要找到MyBaseForm都比较烦
这时就把Dpr中的其他FORM去掉,只剩MainForm与MyBaseForm就行了。
 
回 http://www.delphibbs.com/delphibbs/dispq.asp?lid=761277 自己去看。
 
多人接受答案了。
 
后退
顶部