首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi 手动窗体创造函数

2013-01-01 
delphi 手动窗体创建函数//窗体继承了一个模块窗体,模块窗体自己写的一个自动保存从体内表格的宽度等信息,

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);
...

热点排行