读书人

delphi 手动窗体创造函数

发布时间: 2013-01-01 14:04:19 作者: rapoo

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

unit Unit1;

interface

uses
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;

interface

uses
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.

[解决办法]
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);
...

读书人网 >.NET

热点推荐