极度艰难:如何将一个ActiveForm另存为得到另外一个ActiveForm?(100分)

  • 主题发起人 yangyang2008
  • 开始时间
Y

yangyang2008

Unregistered / Unconfirmed
GUEST, unregistred user!
1.copy
2.更改其类名,控件名称
 
更改类名也不行,因为guid没有变。
如果手工替换十分困难。
我的办法是重建一个,然后拷贝代码。
 
难道就没有简单的办法?
 
你点击file,点击save project as 这样把工程文件另存为一个你想要的文件名,然后点击save as 这样把单元文件另存为你想要的名称即可.
这样做后你在生新注册和重新发布你的新工程文件.我以前就是这样做,一定是最简单的办法。
 
这样的结果是:新的ActiveForm和旧的ActiveForm是同一个东西。
而我要的是两个不同的ActiveForm,即当我改变其中的一个时,
另外一个不改变!
 
我也遇到过你的问题
当时没有好的解决办法,只有重新建立,复制代码
 
没见过这么懒的人!!!!
 
先将窗体的几个文件拷贝到另一个目录,然后打开他(注意,不是原来目录的),
修改窗体名和用SAVE AS 一个新名称(可以放到原来目录),再在工程中添加进出;
 
这样不行,我试了n遍了!
 
你们没明白搂主的意思,确实ActiveForm没有办法copy,
但你可以copy代码方便一点,你选中所有的控件,选择菜单-〉component->Create Component Template,
创建控件模版后,你新建你的ActiveForm,然后把创建的控件模版放到新建的ActiveForm里,
这时候,控件和控件的代码都过来了
 
反正没人会,散了吧!
 
关键问题是clsID,可以通过alt+ctrl+g来获得,同时在相应的TLB文件中的TLB文件中的GUID也要进行修改
 
我有一办法特简单,不过你要加分
 
yxz123,那样是不行的,我试过。
yunye,300分够吗?
 
yunye,你不是说有一个简单的办法吗?我在苦等你的回音!
 
你新建一个

然后将原来的unit拷贝过来
引入项目行不行?

反正以前我是重新写过
 
这样不行的。和原来是同一个ActiveForm。
 
呵呵,不好意思,这段时间有事.
现在公布了,记得给分啊:
假如你原来的ActiveXForm是 afx1,对应的接口是Iafx1,对应的事件接口是Iafx1Events,
对应的pas文件是afx1Impl1.pas,对应的form文件是afx1Impl1.dfm
1.现在你新建一个ActiveXForm 假如叫afx2,自动生成了对应的接口是Iafx2,对应的事件
接口是Iafx2Events,对应的接口文件是afx2Impl1.pas,对应的form文件是afx2Impl1.dfm
2.关闭工程文件,单独打开afx1Impl1.pas,然后另存为afx2Impl1.pas,然后把Form的Name改为afx2
3.单独打开新的afx2Impl1.pas文件(其实就是你原来的ActiveXForm的pas文件),查找所有
引用或调用到Iafx1的地方,修改为Iafx2,查找所有引用或调用到Iafx1Events的地方,
修改为Iafx2Events,一般修改到的地方非常少,好象就3个地方
4.如果你的两个ActiveX不在一个Type Library里,你需要更改uses里对应的新的Iafx2
的Type Library的Pas文件也就是 **_TLB.pas
5.如果你在原有AciveXForm里申明了大量的接口方法,那要么你对Iafx2重新加入那些
接口方法(一般ActiveX实在是没有什么必要申明接口的方法,又不是RemoteDataModule),
如果你真的写了很多方法而且很懒,那就让你的新的AciveXForm同时实现Iafx2和Iafx1
接口吧,比如写成 Tafx2 = class(TActiveForm, Iafx2,Iafx1),注意这时候如果你更改
Iafx1接口的方法,Tafx2不会自动变化,你需要手工同步代码的变化.
好了这样一来就搞定了,是不是比代码复制啊什么的简单得多
最后记得开贴给分啊!
 
接受答案了.
 
顶部