delphi 窗体动态打开函数
将下面这个动态窗体打开方法改成一个通用的函数
TgysForm = class(TfrmMBForm)
gysForm: TgysForm;
if not Assigned(gysform) then
begin
try
gysform := Tgysform.Create(application);
gysform.ShowModal;
finally
freeAndNil(gysform);
end;
end;
补充:procedure TfrmMain.N13Click(Sender: TObject);
begin
if not Assigned(frmChgPwd) then
begin
try
frmChgPwd := TfrmChgPwd.Create(application);
frmChgPwd.ShowModal;
finally
freeAndNil(frmChgPwd);
end;
end;
end;
这种形式希望改写成函数是这种的,单击事件里面一行代码就好了,主要是通用。
TgysForm = class(TfrmMBForm)
gysForm: TgysForm;
TkhglForm = class(TfrmMBForm)
khglForm: TkhglForm;
procedure TfrmMain.N13Click(Sender: TObject);
begin
frmShow(gysForm); //frmShow(khglForm);
end;
追问:Frm:=TFrm.Create(application);
TFrm编译不了[Error] UMain.pas(1042): Undeclared identifier: 'TFrm'
不知道如何解决呢。不对,你这种是要判断窗体是否打开吗?
答案:Procedure FormCreateAndShow(frm:TForm);
begin
if not Assigned(frm) then
begin
try
Frm:=TFrm.Create(application);
Frm.Showmodal;
finally
freeAndNil(frm);
end;
end;
//定义过程
//调用
procedure TfrmMain.N13Click(Sender: TObject);
begin
FormCreateAndShow(gysForm)
end;
其他:Function myFunc(gysForm:TForm):boolean;
begin
try
gysForm:=Tgysform.Create;
(gysForm as TgysForm).showModal;
except
result:=False;
FreeAndNil(gysForm);
end;
result:=True;
FreeAndNil(gysForm);
end; if Form2 = nil then //为什么Form2不为空
(这个很简单,因为form2是你定义的一个局部变量,并没有给初始值,所以form2不一定为空)
Form2 := TForm2.Create(nil); //nil,self,application都有什么区别
(控件的Create构造函数,之所以有参数,是因为它们都继承自TComponent,而这个参数是表示了控件的归属,父控件会将控件从原来的父控件中删除,加入到自己的子控件列表中,对于窗体来说,这个意义不大)
Application.CreateForm(TForm2, Form2);
(至于这种创建方法,是和进程的管理方面有关系,除了可以创建窗体,当进程没有主窗体时,它会将当前创建的这个窗体设置为主窗体,当然创建的窗体,必须是从TForm继续而来的,否则不会设置的)
你的代码,一般简单的写法:
with TForm2.Create(nil) do begin
ShowModal;
Free;
end;
上一个:delphi7 sql模糊查找
下一个:delphi 中<>什么意思