窗体Showmedol 遇到的奇怪异常

时间:2022-02-17 23:56:00

procedure SetTransparentForm (popupFrm:TForm;Color:TColor;AlphaBlendValue:Integer); var FrmTransparent: TFrmTransparentForm; begin if not Assigned(FrmTransparent) then FrmTransparent:=TFrmTransparentForm.Create(nil); FrmTransparent.fPopupForm :=popupFrm; // FrmTransparent.Color :=TColor(Color); //clTeal;// FrmTransparent.AlphaBlendValue:=AlphaBlendValue; FrmTransparent.FormStyle := fsNormal; FrmTransparent.Visible := False; FrmTransparent.ShowModal; //弹出透明窗体 FreeAndNil(FrmTransparent); end; //以上代码在 exe中没有任何问题,当把代码移到公共包中后: //出现局部变量赋值异常(线程或主进程调用),各种调试测试,发现奇葩问题点,做以下调整和解释: //局部变量和全局变量 若不首先赋值 :=nil 都会有异常。 procedure SetTransparentForm (popupFrm:TForm;Color:TColor;AlphaBlendValue:Integer); var FrmTransparent: TFrmTransparentForm; begin //------------方法一 FrmTransparent := nil;//用私有变量,若没有此句,,此段会异常,估计局部变量引起的 。^_^ if not Assigned(FrmTransparent) then FrmTransparent:=TFrmTransparentForm.Create(nil); FrmTransparent.fPopupForm :=popupFrm; // FrmTransparent.Color :=TColor(Color); //clTeal;// FrmTransparent.AlphaBlendValue:=AlphaBlendValue; FrmTransparent.FormStyle := fsNormal; FrmTransparent.Visible := False; FrmTransparent.ShowModal; //弹出透明窗体 FreeAndNil(FrmTransparent); //------------方法二 {FrmTransparentForm:=nil; //用全局变量,没有此句 会偶尔出现 cannot make a visible window model;估计线程原因。 if not Assigned(FrmTransparentForm) then FrmTransparentForm:=TFrmTransparentForm.Create(nil); FrmTransparentForm.fPopupForm :=popupFrm; // FrmTransparentForm.Color :=TColor(Color); FrmTransparentForm.AlphaBlendValue:=AlphaBlendValue; FrmTransparentForm.FormStyle := fsNormal; FrmTransparentForm.Visible := False; FrmTransparentForm.ShowModal; //弹出透明窗体 FreeAndNil(FrmTransparentForm); } end;