ros*_*mcm 2 delphi transparency timage alphablending delphi-2006
如果有可疑的参数值,则会在对话框中显示"警告"图像.用户并不总是会注意到它,所以我想在一秒左右的时间内循环淡入淡出(是的,我可以切换Visible属性,但这看起来有点像我只是切换Visible属性).有没有比将它放在自己的表单上并将其浮动在对话框上(以及更改表单的AlphaBlendValue属性)更简单的方法?
您可以使用Opacity参数of 来执行此操作TCanvas.Draw.在幕后,这会调用TGraphic.DrawTransparent哪些调用Windows AlphaBlendAPI函数.实现这一目标的简单方法是TPaintBox:
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;
Run Code Online (Sandbox Code Playgroud)
如果您使用的是没有Opacity参数的旧版Delphi ,TCanvas.Draw可以AlphaBlend直接使用.
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;
Run Code Online (Sandbox Code Playgroud)
感谢Giel建议的Opacity参数TCanvas.Draw,以及Sertac指出它是最近添加的TCanvas.Draw.
| 归档时间: |
|
| 查看次数: |
1237 次 |
| 最近记录: |