在應用程序中引入圖片淡入及淡出,可以讓用戶界面更加美觀。以前報刊雜志中介紹
的常用方法有兩種:一是自己寫程序,諸個象素進行混合漸變;二是使用DirectX,建立一
個帶Alpha通道的Surface。第一種,效果可以自己控制,但比較麻煩,而且一般不容易生
成硬件優化的代碼;第二種速度很快,卻需要使用DirectX庫。
本文結合Delphi實例代碼,介紹兩種簡單快速的實現方法,算是一個總結吧,希望能
對初學者有所幫助。
一:AnimateWindow函數的使用:
(一)函數原型:
BOOL AnimateWindow(
HWND hwnd, // 要進行特效顯示的窗體的句柄
DWord dwTime, // 動畫持續時間,以毫秒為單位
DWord dwFlags // 動畫類型
);
(二)參數設置:
hwnd :用“窗體名.handle”即可,如:Form1.handle;
dwTime:一般情況下用400比較合適,我偏向於1000;
dwFlags:可以設為多種效果,詳見MSDN,這裡我只介紹淡入淡出用到的參數AW_BLEND;
如果是淡入,設為AW_BLEND即可,如果是淡出,設為AW_BLEND or AW_HIDE。
(三)程序實例:
新建一個工程,在生成的窗體Form1上添加一個按鈕Button1,Button1的Caption設為“淡
出”;接下來添加如下兩段代碼,實現淡入淡出:
1、淡入:雙擊Form1,在其“OnCreate”事件中添加:
AnimateWindow(Form1.Handle,1000,AW_BLEND);
2、淡出:雙擊Button1,在其“OnClick”事件中添加:
AnimateWindow(Form1.Handle,1000,AW_HIDE or AW_BLEND);
form1.Close;//關閉窗口
整個程序的procedure如下:
procedure TForm1.FormCreate(Sender: TObject);
begin
AnimateWindow(Form1.Handle,1000,AW_BLEND);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
AnimateWindow(Form1.Handle,1000,AW_HIDE or AW_BLEND);
form1.Close;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
AnimateWindow(Form1.Handle,1000,AW_BLEND);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
AnimateWindow(Form1.Handle,1000,AW_HIDE or AW_BLEND);
form1.Close;
end;
二、AlphaBlend屬性結合Timer組件:
(一)原理:
在Delphi6.0以上(6.0以下我不了解),每個窗體有AlphaBlend屬性和AlphaBlendValue
屬性,將AlphaBlend屬性設為True,然後在Timer組件中隨著時間改變AlphaBlendValue的
值(0-255)即可。
(二)程序實例:
新建一個工程,並添加一個窗體Form2,將其AlphaBlend屬性設置為True;在窗體Form1上添
加一個按鈕Button1,Caption屬性設為“淡入”,在Form2上添加一個按鈕Button1,Caption
屬性設為“淡出”;另外,在Form2上添加兩個Timer組件Timer1、Timer2,將它們的Interval
屬性設為3(越大動畫時間越長),Enable設為False;接下來添加如下4段代碼:
1、雙擊Form1上的Button1,在其“OnCreate”事件中添加:
Form2.AlphaBlendValue:=1;//窗體從透明開始
Form2.Show; //顯示窗體Form2
Form2.BringToFront; //將窗體Form2移到前端
Form2.Timer1.Enabled:=true; //啟動Timer1,控制窗體可見度-增加
2、雙擊Form2上的Button1,在其“OnCreate”事件中添加:
Timer2.Enabled:=true; //啟動Timer2,控制窗體可見度-減少
3、雙擊Form2上的Timer1,在其“OnTimer”事件中添加:
Form2.AlphaBlendValue:=Form2.AlphaBlendValue+1;//增加可見度
Timer2.Enabled:=false; //停止Timer2
//如果可見度達到最大,停止Timer1
if Form2.AlphaBlendValue=255 then
timer1.Enabled:=false;
Form2.AlphaBlendValue:=Form2.AlphaBlendValue+1;//增加可見度
Timer2.Enabled:=false; //停止Timer2
//如果可見度達到最大,停止Timer1
if Form2.AlphaBlendValue=255 then
timer1.Enabled:=false;
4、雙擊Form2上的Timer2,在其“OnTimer”事件中添加:
Form2.AlphaBlendValue:=Form2.AlphaBlendValue-1;//減少可見度
Timer1.Enabled:=false; //停止Timer1
//如果可見度達到最小,停止Timer2
if Form2.AlphaBlendValue=0 then
begin
timer2.Enabled:=false;
Form2.Close;
end;