窗体Showmedol 遇到的奇怪异常: cannot make a visible window model

//窗体Showmedol 遇到的奇怪异常: cannot make a visible window  model
//背景:ShowModal A窗体,A窗体再ShowModal B窗体;A是透明背景窗体,B是提示窗体;

//第一次使用该全局变量,使用完毕后,FreeAndNil,目的是不影响第二次使用(和重新初始化属性)
 if not Assigned(frmAd) then
            frmAd := TfrmAd.Create(nil);
          frmAd.SetUrl(r46002.Data.URL);
          if not Assigned(FrmChangePWTransparent) then
            FrmChangePWTransparent:=TFrmChangePWTransparent.Create(nil);
          FrmChangePWTransparent.fPopupForm :=frmAd;
          //FrmChangePWTransparent.FormStyle := fsNormal;
          //FrmChangePWTransparent.Visible := False;
          FrmChangePWTransparent.ShowModal;
          FreeAndNil(FrmChangePWTransparent);

//第二次使用
 if not Assigned(frmRemind) then
        frmRemind := TfrmRemind.Create(nil);
      if not Assigned(FrmChangePWTransparent) then
        FrmChangePWTransparent:=TFrmChangePWTransparent.Create(nil);
      FrmChangePWTransparent.fPopupForm :=frmRemind;
      //FrmChangePWTransparent.FormStyle := fsNormal;
      //FrmChangePWTransparent.Visible := False;
      FrmChangePWTransparent.ShowModal;   //弹出透明窗体
      FreeAndNil(FrmChangePWTransparent);
//但是会弹出异常 cannot make a visible window  model ,
//百度了解:http://blog.sina.com.cn/s/blog_4b5f4fbc0100kt5p.html
//修改:加多两句,如上面去掉注释。
    FrmChangePWTransparent.FormStyle := fsNormal;
    FrmChangePWTransparent.Visible := False;
//还是无法解决问题。

//解决:后来想既然是 make a visible window  model,猜想第一次使用完后 FrmChangePWTransparent 全局变量没有完全释放【很奇怪】,
//别人就 另立 一个变量,解决问题。经验呀。

    var FrmTransparent: TFrmChangePWTransparent;
    
    if not Assigned(frmRemind) then
        frmRemind := TfrmRemind.Create(nil);
      if not Assigned(FrmTransparent) then
        FrmTransparent:=TFrmChangePWTransparent.Create(nil);
      FrmTransparent.fPopupForm :=frmRemind;  //
      FrmTransparent.FormStyle := fsNormal;
      FrmTransparent.Visible := False;
      FrmTransparent.ShowModal;   //弹出透明窗体
      FreeAndNil(FrmTransparent);

 

posted @ 2016-09-20 17:01  海蓝7  阅读(833)  评论(0编辑  收藏  举报