当前位置:编程学习 > Delphi >>

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 中<>什么意思

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,