📄 unit1.pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TfrmMain = class(TForm)
Image1: TImage;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
Bitmap:TBitmap;
implementation
{$R *.dfm}
procedure TfrmMain.Button1Click(Sender: TObject);
var
sBlendFunction: BlendFunction;
// 这是Alpha混合时需要的一个类型参数
i: byte;
begin
if Button1.Caption='淡入' then
begin
Button1.Caption:='淡出';
with sBlendFunction do
// 设置初值
begin
BlendOp := AC_SRC_OVER;
// 目前唯一支持的一种混合方式
BlendFlags := 0;
// 必须为零
AlphaFormat := 0
// 缺省
end;
for i := 0 to 51 do // 共有51帧
begin
sBlendFunction.SourceConstantAlpha:= i * 5;
// 从全透明到不透明,每次渐变5级
Windows.AlphaBlend(Image1.Canvas.Handle,0,0,Image1.Width,
Image1.Height,Bitmap.Canvas.Handle,0,0,
Bitmap.Width,Bitmap.Height,sBlendFunction);
// Alpha混合处理
sleep(50);
// 延时50毫秒,适当的延时可让效果看起来更逼真
Image1.Refresh;
// 一定要实时刷新Image1,才能看出变化
end;
end
else
begin
Button1.Caption:='淡入';
with sBlendFunction do
begin
BlendOp := AC_SRC_OVER;
BlendFlags := 0;
AlphaFormat := 0;
end;
for i := 0 to 51 do
begin
sBlendFunction.SourceConstantAlpha:= i * 5;
Windows.AlphaBlend(Image1.Canvas.Handle,0,0,Image1.Width,
Image1.Height,Bitmap.Canvas.Handle,0,0,
1,1,sBlendFunction);
sleep(50);
Image1.Refresh;
end;
end;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
Bitmap:=TBitmap.Create;
Bitmap.LoadFromFile('鸟.bmp');
end;
procedure TfrmMain.FormDestroy(Sender: TObject);
begin
Bitmap.Free;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -