//窗体继承了一个模块窗体,模块窗体自己写的一个自动保存从体内表格的宽度等信息,只需要在设计期的时候新建窗体
里将TgysForm = class(TForm)改为 TgysForm = class(TfrmMBForm)就可以了,现在想将这种固定的打开窗体方式改写成一个通用函数,每个新建的窗体都会将class(TForm)改为class(TfrmMBForm),
gysForm: TgysForm;
手动创建窗体的方法:
procedure TfrmMain.N13Click(Sender: TObject);
begin
if not Assigned(gysform) then
begin
try
gysform := Tgysform.Create(application);
gysform.ShowModal;
finally
freeAndNil(gysform);
end;
end;
end;
希望可以改写成一个通用的函数,只需要将要创建的窗体传入到函数里面调用一下即可打开窗体。
里将TgysForm = class(TForm)改为 TgysForm = class(TfrmMBForm)就可以了,现在想将这种固定的打开窗体方式改写成一个通用函数,每个新建的窗体都会将class(TForm)改为class(TfrmMBForm),
gysForm: TgysForm;
手动创建窗体的方法:
procedure TfrmMain.N13Click(Sender: TObject);
begin
if not Assigned(gysform) then
begin
try
gysform := Tgysform.Create(application);
gysform.ShowModal;
finally
freeAndNil(gysform);
end;
end;
end;
希望可以改写成一个通用的函数,只需要将要创建的窗体传入到函数里面调用一下即可打开窗体。
procedure TfrmMain.N13Click(Sender: TObject);
begin
if not Assigned(gysform) then
begin
try
gysform := Tgysform.Create(application); //这个地方请改成gysform := Tgysform.Create(nil);
gysform.ShowModal;
finally
freeAndNil(gysform);
end;
end;
end;
如果你指定的owner为application,就不要手动释放了
unit1
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
procedure ShowForm(str:string);
public
{ Public declarations }
end;var
Form1: TForm1;implementation
{$R *.dfm}procedure TForm1.ShowForm(str:string);
var
frmName:TForm;
begin
if GetClass(str) <> nil then
begin
frmName:=TFormClass(FindClass(str)).Create(self);
frmName.ShowModal;
end;
end;procedure TForm1.btn1Click(Sender: TObject);
var
str1: string;
begin
str1:= 'TfrmTest';
ShowForm(str1);
end;end.unit2
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;type
TfrmTest = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;var
frmTest: TfrmTest;implementation{$R *.dfm}
Initialization
RegisterClass(TfrmTest); //这个地方很重要
Finalization
UnRegisterClass(TfrmTest);
end.
if not Assigned(gysform) then
begin
gysform := Tgysform.Create(application);
gysform.FormStyle := fsMDIChild;
gysform.Show;
end else gysform.BringToFront;
begin
if not AsSigned(vForm) then
vForm:=pForm.Create(Application);
else
vForm.BringToFront;
end;调用:
CreateForm(TForm(Form1),TForm1);
CreateForm(TForm(Form2),TForm2);
...
begin
if not Assigned(gysform) then
begin
try
gysform := Tgysform.Create(application);
gysform.ShowModal;
finally
freeAndNil(gysform);
end;
end;
end;
下面是一点点的完善的代码,贴出来给各位看看
procedure TfrmMain.CreateForm(var vForm:TForm; Const pForm:TFormclass);
begin
if not AsSigned(vForm) then
begin
vForm:=pForm.Create(Application);
vForm.FormStyle := fsMDIChild;
vForm.Show;
end else
vForm.BringToFront;
end;