delphi 窗体动态打开函数

将下面这个动态窗体打开方法改成一个通用的函数TgysForm=class(TfrmMBForm)gysForm:TgysForm;ifnotAssigned(gysfor... 将下面这个动态窗体打开方法改成一个通用的函数
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;
展开
 我来答
手机用户04201
2011-08-30 · 超过32用户采纳过TA的回答
知道答主
回答量:164
采纳率:0%
帮助的人:91.5万
展开全部
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;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Pennwin
2011-08-29 · TA获得超过215个赞
知道小有建树答主
回答量:555
采纳率:0%
帮助的人:356万
展开全部
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;
追问
不对,你这种是要判断窗体是否打开吗?
追答
创建失败了返回false,创建成功了返回True
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Hoper0226
2011-08-30 · TA获得超过135个赞
知道小有建树答主
回答量:107
采纳率:0%
帮助的人:120万
展开全部
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;
追问
Frm:=TFrm.Create(application);
TFrm编译不了[Error] UMain.pas(1042): Undeclared identifier: 'TFrm'
不知道如何解决呢。
追答
哦,我写错了
Frm:=TForm.Create(application);
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式