delphi 手动窗体创建函数
//窗体继承了一个模块窗体,模块窗体自己写的一个自动保存从体内表格的宽度等信息,只需要在设计期的时候新建窗体
里将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;
希望可以改写成一个通用的函数,只需要将要创建的窗体传入到函数里面调用一下即可打开窗体。
[解决办法]
给一段你参考一下
unit1
- Delphi(Pascal) code
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.
[解决办法]
- Delphi(Pascal) code
procedure CreateForm(var vForm:TForm; Const pForm:TFormclass);begin if not AsSigned(vForm) then vForm:=pForm.Create(Application); else vForm.BringToFront;end;调用:CreateForm(TForm(Form1),TForm1);CreateForm(TForm(Form2),TForm2);...