• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • C++Builder中實現動畫

    發表于:2007-07-04來源:作者:點擊數: 標簽:
    中國氣象局監測 網絡 司信息網絡處 夏登城 一、直接使用Animate 部件 在您的程序中只要增加一個Animate 部件,并設置其部分屬性就可實現動畫,但缺點就在于Animate 部件只能打開已有的AVI 視屏文件(或使用Windows 公用AVI),有一定的系統開銷。 在板2(Pane
    中國氣象局監測網絡司信息網絡處 夏登城

      一、直接使用Animate 部件

      在您的程序中只要增加一個Animate 部件,并設置其部分屬性就可實現動畫,但缺點就在于Animate 部件只能打開已有的AVI 視屏文件(或使用Windows 公用AVI),有一定的系統開銷。
      在板2(Panel2)中加入一個Animate 部件(Animate1),我們設置其FileName 或CommonAVI 及Active 屬性以使其執行某AVI 視屏文件或Windows 公用AVI。設置Animate1 的CommonAVI 屬性值為aviFindFolder,它將執行我們常見的在搜索文件夾過程中的搜索動畫。

      為控制Animate1 的動作,為第一個復選框(CheckBox1)的OnClick 事件增加代碼如下:

    void  __fastcall  TDemoForm::
    CheckBox1Click(TObject *Sender)
    {
      Animate1 ->Active = CheckBox1 ->Checked;    
    }

      二、使用Timer 部件定時繪制畫面

      在C ++Builder 的System 標簽中有一個Timer 部件,使用Timer 部件實際上是使用Windows 定時器,定時繪制部分畫面,達到動畫效果。
      準備幾張連續的Bmp 圖片。

      Pic0.bmp Pic1.bmp Pic2.bmp Pic3.bmp 在板3(Panel3)中加入Image 部件(Image1),并預裝入一幅圖片(如:Pic3.bmp)。

      為在程序中存儲這些圖片,在主窗體的頭文件中增加變量定義:

    TPicture *pic[4];  //  存儲圖片的指針
    int number;      //  記錄當前圖片序號
      并為主窗口的OnCreate 事件增加代碼,在程序主窗口創建時裝入圖片,即:

    void  __fastcall  TDemoForm::FormCreate(TObject *Sender)
    {
      number = 0;
      AnsiString Path = ExtractFilePath(Application ->ExeName);
      for(int i=0; i<4; i ++) {
        pic[i] = new TPicture();
        try {
       pic[i] ->LoadFromFile(Path +
                     "pic" +IntToStr(i) +“.bmp");
        }
        catch(...) {
           Application ->MessageBox
          ("\n 無法打開圖片文件...\t\n",
        “錯誤", MB_ICONWARNING|MB_OK);
        }  }
    }
      增加Timer 部件(Timer1),設置其時間間隔Interval 屬性為200 毫秒;另外,設置Timer1 的Enabled 屬性值為false。為定時更換繪制圖片,為Timer1 的OnTimer 事件增加代碼如下:

    void  __fastcall  TDemoForm::
    Timer1Timer(TObject *Sender)
    {
      Image1 ->Canvas ->CopyRect
      (Image1 ->ClientRect,
       pic[number] ->Bitmap ->Canvas,
       Rect(0, 0, pic[number] ->Width,
          pic[number] ->Height));
      number ++;
      number %=4;    
    }
      為第二個復選框(CheckBox2)的OnClick 事件增加代碼如下,以控制動畫的執行與停止:

    void  __fastcall  TDemoForm::CheckBox2Click
    (TObject *Sender)
    {
      Timer1 ->Enabled = CheckBox2 ->Checked;    
    }
      使用Timer 部件,定時繪制畫面也并不復雜,但因為要存儲多幅圖片,系統開銷卻是相當大的,但其動畫效果卻也相當好。

      三、利用程序空閑時間更換/ 重繪畫面

      OnIdle 事件是TApplication 類的事件之一。當應用程序空閑時,程序就會產生OnIdle 事件,利用程序空閑執行動畫不是很妙嗎?
      首先在演示程序主窗體的第四個板(Panel4)上增加一個標簽(Lable1),根據你的個人愛好設置其Caption 及Font 等屬性。再在主窗體的類定義中增加一個OnIdle 事件處理函數,它像普通函數一樣定義,但需保證其原型正確。我們定義的OnIdle 事件處理函數在主窗體的頭文件中作如下申明:

      void __fastcall MyIdleHandler(TObject *Sender, bool &Done);

      其完整代碼為:

    void __fastcall TDemoForm::MyIdleHandler
    (TObject *Sender, bool &Done)
    {
      int StartTime = GetTickCount();
      if(Label1 ->Top +Label1 ->Height>0) {
        Label1 ->Top --;
      }
      else {
        Label1 ->Top = Panel4 ->Height;
      }
      while(GetTickCount() -StartTime < 50);
    }
      請注意,為避免移動標簽速度過快,使用
    了下面的代碼段:
    int StartTime = GetTickCount();
    ...
    while(GetTickCount() -StartTime < 50);
      它保證了動畫的時間間隔不少于50 毫
    秒。
      為第三個復選框(CheckBox3)的OnClick 事件
    增加代碼如下:
    void __fastcall TDemoForm::CheckBox3Click
    (TObject *Sender)
    {
      if(CheckBox3 ->Checked) {
        Application ->OnIdle = MyIdleHandler;
      }
      else {
        Application ->OnIdle = NULL;
      }
    }
      為保證程序執行的安全性,還需在程序
    結束時做一些必要的處理(如釋放程序運行過程中分配的空
    間)。為主窗體的OnDestroy 事件增加代碼如下:
    void  __fastcall  TDemoForm::FormDestroy
    (TObject *Sender)
    {
      for(int i=0; i<4; i ++) {
        delete pic[i];
      }
      Application ->OnIdle = NULL;
    }   

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>