向Delphi的TImage添加AlphaBlendValue属性的最简单方法是什么?

时间:2011-02-05 07:01:13

标签: delphi transparency alphablending delphi-2006 timage

如果有可疑参数值,则会在对话框中显示“警告”图像。用户并不总是会注意到它,所以我想在一秒左右的时间内循环淡入淡出(是的,我可以切换Visible属性,但这看起来有点像我只是切换Visible属性)。有没有比将它放在自己的表单上更简单的方法并将其浮动到对话框上(并更改表单的AlphaBlendValue属性)?

2 个答案:

答案 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是最简单的选择。