if not Assigned(form1 ) then
begin
form1:=tform1.Create(nil);
form1.Show ;
end
else
form1.WindowState:=wsMaximized ;上面一段代码是在调用窗体前,先判断是否存在,然后再进行调出.
如何把上面代码做成函数或过程?还有怎样调用窗体更合理安全?请在上面代码基础上做点小小的完善.望高手赐教.

解决方案 »

  1.   

    procedure CheckAndShow(form1:TForm)
    begin
    if not Assigned(form1 ) then
       begin
       form1:=tform1.Create(nil);
       form1.Show ;
       end
    else
       form1.WindowState:=wsMaximized ; 
    end;
      

  2.   

    上面方法不行,我自己也是这么写的.
    会出现下面错误提示:
    Undeclared identifier: 'tform1'
      

  3.   


    是因为你没有引用form1所在的单元,在implementation下写上uses Unit1(假如是Unit1的话)
      

  4.   

    我是想做一个公用函数,这里的form1是泛指,而不是指具体的某一个窗体.
    没办法用uses unit1
      

  5.   

    procedure CreateFormAlways(var Form: TForm;Class:TFormClass);
    begin
      if Not Assigned(Form) then begin
        Form := Class.Create(Nil);//或者Application.CreateForm(Form,Class);
        Form.Show;
      end else begin
        form.WindowState:=wsMaximized 
      end;
    end;调用一:
    CreateFormAlways(Form1,TForm1);调用二:
    CreateFormAlways(Form2,TForm2);
      

  6.   


    在用codeCreateFormAlways(Form1,TForm1)调用时,怎么出现"Types of actual and formal var parameters must be identical"
    的错误呢,不知道是什么原因?
      

  7.   

    忘了类型转换了。
      CreateFormAlways(TForm(Form6),TForm6);