procedure TMainForm.N9Click(Sender: TObject);
var
  ZyglForm: TZyglForm;
begin
    ZyglForm := TZyglForm.Create(self);      
    ZyglForm.Show;
end;
我是点击的时候才创建窗体,但有个问题是:如果不停的点就会不停的创建窗体,我想在前面
有判断的语句,如果已经存在了,就直接显示,没有则创建,请问如何判断?
我是新手

解决方案 »

  1.   

      zyglform := nil;
      for i := 0 to screen.forms.count - 1 do
        if screen.forms[i] is tzyglform then
        begin
          zyglform := screen.forms[i] as tzyglform;
          break;
        end;
      if zyglform = nil then
        zyglform := tzyglform.create(self);
      zyglform.show;
      

  2.   

    最后是不是应该还要加一句zyglform.free 呢
      

  3.   

    实现singleton模式Creating a real singleton class in Delphi 5
    http://dn.codegear.com/article/22576
      

  4.   

    --------------------------------------------------------------
    procedure TMainForm.N9Click(Sender:   TObject);
    begin
      if ZyglForm=nil then ZyglForm := TZyglForm.Create(self);            
      ZyglForm.Show;
      ZyglForm.BringToFront;
    end; 
    --------------------------------------------------------------
    type
    TZyglForm=class(TForm)
      ...
      private
      {Private declarations}
      procedure FormClose(Sender: TObject; var Action: TCloseAction);
    end;var
      ZyglForm:   TZyglForm;
    implementationprocedure TZyglForm.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action := cafree;
      ZyglForm := nil;
    end;
      

  5.   

    窗口关闭消息,要把两行代码颠倒一下。否则可能会出内存访问错误。
    procedure TZyglForm.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      ZyglForm := nil;
      Action := cafree;
    end;
      

  6.   

    我是在主窗口上有菜单的,通过菜单来打开子窗口的.应该怎么处理?
    我接触DELPHI 不久.