搞了多年的Delphi,对“按子窗体类名去创建窗体”的方式还不会啊! 本帖最后由 skyclin 于 2011-06-18 22:53:30 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼主的这种Form类使用,我选择这样作首先创建一个Form,保存为TxxFormBase写好公共的事件,放好公共的控件,加上一些抽象方法(用来实现公共调用入口)保存之后要建立子类,(D7)点新建按钮,选择"项目文件"那个页面,选择TxxFormBase,OK后,就出现新窗口,(Delphi 7)(D2010)点新建按钮,依次是Delphi Projects -> Inherited Items -> TxxFormBase -> OKTxxFormBase的控件都有了,即使TxxFormBase里写了OnCreate事件,新窗口中依然可以写OnCreate事件,不冲突,在新窗口中的OnCreate事件中,inherited;这一行不能删除,否则TxxFormBase的OnCreate事件代码就不会执行,其他事件同样,然后override父类(TxxFormBase)的抽象方法,写上代码就可以干事了,创建时,GetClass('子类类名').Create(Application);....即可要修改TxxFormBase的代码控件什么的,改完保存即可,子类跟着动,唯一值得注意的就是子类的inherited这一行不要轻易删除。 更正一下TxxFormBase(GetClass('子类类名')).Create(Application);...补充一点我们通常不override Constructor Create,而是在OnCreate里写即可,这只是个习惯问题 试试kiboisme的方法,已经说得很详细了,如果楼主想提高这方面的知识,看看《Inside VCL》 努力学习中顶顶,学习学习一下>>>>>>>>>>>>>>>>>> 看picture的实现方式,图片可以向picture注册类型,很方便,但也不一定就非要那么做 RegisterClass(TFromA); RegisterClass(TFromB);var formclass:Tformclass; aform:TForm;begin formclass:=Tformclass(GetClass('TFromA'))); aform :=formclass.Create(nil);end; 如上,你只要在每个子窗体的 initialization后面加上 RegisterClass(TFromB);就可以。除了窗体,从TPersistent继承的类 都可以用这类方法。 指针出错问题。。。。。。。。。。。。。。。。。。!!!!!!!!!!!!!!!!!! SQL SERVER中有关时间区间的查询问题 寻找vcl高手 出现灾难性故障,急在线等。 呓语凌晨 为了方便大家即使讨论,建了一个VB、delphi开发技术讨论固定群2196990,期待精英的加入 超级菜问题,怎么样判断一个字符串是以“19”开头???在线等!!! 写VCL控件的高手请过来 在TTS中朗读中文,怎样随着朗读将文本框里的相应文字加亮? 关于三层数据库中实现主细表更新数据的问题?加急----飞鸽传真! 怎样把图片上传到服务器?要弄个服务端? RM报表里打印一段文字自动分页的问题?
写好公共的事件,放好公共的控件,加上一些抽象方法(用来实现公共调用入口)
保存之后要建立子类,
(D7)点新建按钮,选择"项目文件"那个页面,选择TxxFormBase,OK后,就出现新窗口,(Delphi 7)
(D2010)点新建按钮,依次是Delphi Projects -> Inherited Items -> TxxFormBase -> OKTxxFormBase的控件都有了,即使TxxFormBase里写了OnCreate事件,新窗口中依然可以写OnCreate事件,不冲突,在新窗口中的OnCreate事件中,inherited;这一行不能删除,否则TxxFormBase的OnCreate事件代码就不会执行,其他事件同样,然后override父类(TxxFormBase)的抽象方法,写上代码就可以干事了,创建时,GetClass('子类类名').Create(Application);....即可要修改TxxFormBase的代码控件什么的,改完保存即可,子类跟着动,唯一值得注意的就是子类的inherited这一行不要轻易删除。
TxxFormBase(GetClass('子类类名')).Create(Application);...
补充一点
我们通常不override Constructor Create,而是在OnCreate里写即可,这只是个习惯问题
顶顶,学习学习一下>>>>>>>>>>>>>>>>>>
RegisterClass(TFromB);var
formclass:Tformclass;
aform:TForm;
begin
formclass:=Tformclass(GetClass('TFromA')));
aform :=formclass.Create(nil);
end; 如上,你只要在每个子窗体的 initialization后面加上 RegisterClass(TFromB);就可以。
除了窗体,从TPersistent继承的类 都可以用这类方法。