窗体Showmedol 遇到的奇怪异常-->进阶问题

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;
原文地址:https://www.cnblogs.com/rogge7/p/5945225.html