procedure TInfomitionShow.MapMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
begin
    if not Assigned(frmMapInfoShow) then
        frmMapInfoShow:=TfrmMapInfoShow.Create(nil);
    frmMapInfoShow.InfoList:=InfoList;
    frmMapInfoShow.EditMemo;
    frmMapInfoShow.Show;
end;
另一种写法:
procedure TInfomitionShow.MapMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
begin
    if frmMapInfoShow=nil then
        frmMapInfoShow:=TfrmMapInfoShow.Create(nil);
    frmMapInfoShow.InfoList:=InfoList;
    frmMapInfoShow.EditMemo;
    frmMapInfoShow.Show;
end;两种办法都无法判断弹出的非模态窗口是否已经手动关闭.请问,如何在unit中判断非模态窗口已经关闭?

解决方案 »

  1.   

    或者给窗体类加个属性,show的时候为0 ,onclose里面为1,根据属性来(show窗体前看属性)
      

  2.   

    判断他的Visible属性不就行了吗?
      

  3.   

    回chenzhuo:
         窗口都已经FREE掉了,如何设置VISIBLE属性?
    回:dabaicai
         同上,一个已经不存在的窗口,如何知道其属性值呢?
      

  4.   

    那你Free掉的同时有没有 = nil啊
    你用FreeAndNil
    这个时候你就可以用not Assigned()判断了!
      

  5.   

    用api吧,findwindow或者findwindowex,看能否找到该窗体
      

  6.   

    你在close事件里释放Action := cafree;
    可以用not Assigned()判断了!
      

  7.   

    你是用的free还是只是close了一下啊?
      

  8.   

    if frm.ShowModal = mrOK then //frm即将关闭时触发
    begin
    ...
    end;
      

  9.   

    可以使用FindWindow函数来查找窗口
    也可以使用Screen.FormCount来进行遍历窗体,看看是否可以找到你的那个窗体