用兩種方法快速簡單的實現視窗淡入淡出 收藏

2021-08-31 10:42:53 字數 3147 閱讀 9674

用兩種方法快速簡單的實現視窗淡入淡出 收藏

在應用程式中引入淡入及淡出,可以讓使用者介面更加美觀。以前報刊雜誌中介紹

的常用方法有兩種:一是自己寫程式,諸個象素進行混合漸變;二是使用directx,建立一

個帶alpha通道的su***ce。第一種,效果可以自己控制,但比較麻煩,而且一般不容易生

成硬體優化的**;第二種速度很快,卻需要使用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;

用佇列實現棧的兩種方法

用佇列實現棧。方法一 用兩個佇列實現棧 兩個佇列,乙個用於存資料,乙個用於中轉,使用不固定。同一時刻兩個佇列不可能同時有資料。實現棧的操作就是將數在這兩個佇列中不斷轉移。入棧 選擇不為空的佇列加入資料,如果都為空,則加入佇列2.出棧時 將不為空的佇列的資料依次加入另乙個佇列中直至佇列只剩下乙個數,將...

用ASP實現網頁保密的兩種方法

本 人 在 維 護 公 司 內 部 網 站 時 碰 到 一 個 實 際 問 題 mis 主 管 要 求 將 一 些 技 術 文 件 放 在 網 頁 上,且 只 能 讓mis 的 員 工 瀏 覽。這 就 涉 及 到 如 何 對 網 頁 保 密 的 問 題。最 初 我 借 助frontpage 和vbs...

監聽window視窗變化的兩種方法

根據視窗變化,改變頁面展示需求還是很常見 如自適應 echarts自適應問題 以在vue中的使用舉例 一 方法介紹 方法一 使用window的onresize屬性 window.onresize reportwindowsize 1 mounted註冊事件 mounted 300 2 befored...