程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 用兩種方法快速簡單的實現窗口淡入淡出

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

編輯:Delphi

在應用程序中引入圖片淡入及淡出,可以讓用戶界面更加美觀。以前報刊雜志中介紹
  的常用方法有兩種:一是自己寫程序,諸個象素進行混合漸變;二是使用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;
  

  
  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved