我在公共单元中写了个函数,用来打开无模式窗口
function TGnv_App.of_OpenSheet(FormClass: TFormClass; Fm :TForm): Integer;
begin
  If Not Assigned(Fm) Then
    Begin
      Fm := FormClass.Create(Application);
      Fm.Show;
    End;
  Result := 1;
end;然后在主程序中调用
procedure TUfc_F_AppManage.dxBarButton26Click(Sender: TObject);
begin
  Gnv_App.of_OpenSheet(TUfc_F_About,Ufc_F_About);
end;每点击按钮,就弹出窗口,希望第2次点击相同按钮不要再打开窗口
主要是  If Not Assigned(Fm) Then 不起作用,Fm每次进来总是空的!
哪位能帮帮忙!

解决方案 »

  1.   

    function TGnv_App.of_OpenSheet(FormClass: TFormClass; Fm :TForm): Integer;
    begin
      //If Not Assigned(Fm) Then 改为
      if fm=nil then
        Begin
          Fm := FormClass.Create(Application);
          Fm.Show;
        End;
      Result := 1;
    end;
      

  2.   

    EnumWindowEX
    如果不存在就枚举不到.(很恶的方法.)
      

  3.   

    to wlw88(飞杨) If Not Assigned(Fm) Then 
     if fm=nil then这两句话的效果一样的吧!
    我试过了,还是不行!
      

  4.   

    窗口不会因为你这样写
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action := caFree;
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      Self := nil;
    end;
    而将指指针置为空
      Action := Free只是将自己占用的内存释放掉, 它并不知道哪个指针指向了它
    所以你的判断应该用FindWindow or FindWindowEx
    如 if FindWindow(你的窗体类名,  窗口标题) = 0 then  //其中任何一个就可, 也可两个都要)
      创建你的窗体
      

  5.   

    你原來的處理方法是不對的, 應該修改如下:
    function TGnv_App.of_OpenSheet(FormClass: TFormClass; 
     var Fm :TForm): Integer; //注意本行
    ....
    Gnv_App.of_OpenSheet(TUfc_F_About, TForm(Ufc_F_About));我以前遇到過, 是這樣解決的!
      

  6.   

    to  aiirii(ari) 
    用你的方法解决的,其实就是实参和形参的问题,不过我没有注意到类型转化,所以造成错误!非常感谢!同时也谢谢其它朋友!接分吧!
      

  7.   

    楼主你结贴太快了,  你不用函数, 直接有变量来测测(现在可没有形参实参的问题)procedure TForm1.Button1Click(Sender: TObject);
    begin
      if not Assigned(Form2) then
        Form2 := TForm2.Create(Application);
      Form2.Show;
    end;---------------------------------------------------------------------
    procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action := caFree;
    end;procedure TForm2.FormDestroy(Sender: TObject);
    begin
      Self := nil;
    end;