如果有可疑参数值,则会在对话框中显示“警告”图像。用户并不总是会注意到它,所以我想在一秒左右的时间内循环淡入淡出(是的,我可以切换Visible属性,但这看起来有点像我只是切换Visible属性)。有没有比将它放在自己的表单上更简单的方法并将其浮动到对话框上(并更改表单的AlphaBlendValue属性)?
答案 0 :(得分:8)
您可以使用Opacity
的{{1}}参数执行此操作。在幕后调用TCanvas.Draw
,后者又调用Windows AlphaBlend
API函数。实现此目的的一种简单方法是使用TGraphic.DrawTransparent
:
TPaintBox
如果您使用的旧版本的Delphi没有procedure TAlphaBlendForm.FormCreate(Sender: TObject);
begin
FBitmap := TBitmap.Create;
FBitmap.Assign(Image1.Picture.Graphic);//Image1 contains a transparent PNG
PaintBox1.Width := FBitmap.Width;
PaintBox1.Height := FBitmap.Height;
Timer1.Interval := 20;
end;
procedure TAlphaBlendForm.PaintBox1Paint(Sender: TObject);
begin
PaintBox1.Canvas.Draw(0, 0, FBitmap, FOpacity);
end;
procedure TAlphaBlendForm.Timer1Timer(Sender: TObject);
begin
FOpacity:= (FOpacity+1) mod 256;
PaintBox1.Invalidate;
end;
Opacity
参数,则可以直接使用TCanvas.Draw
。
AlphaBlend
感谢Giel建议procedure TAlphaBlendForm.PaintBox1Paint(Sender: TObject);
var
fn: TBlendFunction;
begin
fn.BlendOp := AC_SRC_OVER;
fn.BlendFlags := 0;
fn.SourceConstantAlpha := FOpacity;
fn.AlphaFormat := AC_SRC_ALPHA;
Windows.AlphaBlend(
PaintBox1.Canvas.Handle,
0,
0,
PaintBox1.Width,
PaintBox1.Height,
FBitmap.Canvas.Handle,
0,
0,
FBitmap.Width,
FBitmap.Height,
fn
);
end;
的{{1}}参数,感谢Sertac指出它是Opacity
的最新成员。
答案 1 :(得分:1)
TImage不支持您正在寻找的Alpha透明度。使用单独的浮动TForm是最简单的选择。