Delphi TForm 转 TFrame
Delphi之前的代码,特别是复杂VCL窗口,转为Frame时,有时需要,从头做进,操作繁杂。
本人通过,找到快速将TForm轩为TFrame的办法:
1、新建 一个目录,将窗口文本复制进该目录。
2、为新建TFrame,取名对象名TMyFrame,Frame名MyFrame,单元名uMyFrame
3、将文件单元名修改:uMyFrame.pas,将*.dfm文件,改名uMyFrame.dfm
4、使用文本编辑软件,打开uMyFrame.pas文件:
(1)修改Pas中
type
TIn8Frm = class(TForm)
为
type
TMyFrame = class(TFrame)
(2)修改Pos中首行
unit uMyFrame;
(3)修改Pos中var
var
In8Frame: TIn8Frame;
为
var
MyFrame: TMyFrame;
(4)Pas中,全部In8Frm为MyFrame
(5)Uses 删除无关单元
(6)将OnCreat和OnShow事件中代码合并,建立一个新的TMyFrqme下的过程
FrameShow(Sender: TObject)。
如本单元定义的参数 OutList:TListSttring,在原OnCreate事件创建,就要在本过程中,创建
OutList:=TStringList.Create;
(7)删除OnCreat、OnShow、FormClose、FormDestroy事件。
(8)删除FormOnResize事件,将相应控件尺寸及位置参数,全部按最大化定义。
5、pas文件中,加入类似OnShow的事件
(1)在private段加入事件
private
{ Private declarations }
procedure CMShowingChanged(var M: TMessage); message CM_SHOWINGCHANGED;
public
{ Public declarations }
end;
(2)在implementation段,加入事件的响应实体代码
implementation
uses uDataModuleClient, uMy_COM, uMy_COM1, uMy_COM2, uGrfFrm;
{$R *.dfm}
procedure TFrame_1.CMShowingChanged(var M: TMessage);
var i:Integer;
begin
inherited;
if Showing then
begin
// 原Form OnCreat事件代码
// 原Form OnShow事件代码
FrameShow(Self);
end
end;
6、使用文本编辑软件,打开uMyFrame.dfm文件,全部代替操作
将In8Frm全部改为MyFrame
最在工程项目中,加入MyFrame,再进一步细化即可。
由于批量转换,本人编写一个小程序,实现一健转换:
小程序,可以实现TForm To TFrame修改,标准控件转换第三方控件,方便实用。有效提高工效。
注意:
Pas文件中,控件的修改需要对控件的(控件对象名,控件实体名)二个名称的修改。
Dfm文件中,控件的修改需要对控件的实体名进行修改。
二者的修改名称上要保持一致。