熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

DELPHI中利用對象的常用屬性制作動畫

2022-06-13   來源: Delphi編程 

  在DELPHI中的所有對象中都有提供了TOPLEFTHEIGHTWIDTH四個屬性用以控制對象的位置和大小另外在DELPHI中還提供了一個TIME的構件利用他們可以方便地實現一些動畫

  一. 拉幕

  拉幕式即從中間往兩邊慢慢顯示畫面在此把Dbimage的CENTER屬性設成true;把stretch屬性設成false把WIDTH屬性設成適當設置LEFT的值使其顯示在屏幕中間實現動畫主要方法是修改LEFT屬性(值逐漸變小)和WIDTH屬性(值逐漸變大)要注意的是為了讓幕布從中間均勻地向兩邊拉開WIDTH的改變值必須是LEFT改變值的兩倍在DIMEER的ontime事件中輸入如下語句

    if (dbimageleft >) then
         begin
            dbimageleft:=dbimageleft;
           dbimagewidth:=DBImagewidth+;
           //dbimagewidth的改變值必須是dbimageleft改變值的
         end
      else 
         timerenabled:=false;//拉幕結束

  把上面程序中的LEFT改為TOPWIDTH改為HEIGHT就可以實現豎直方向的拉幕如果把拉幕這種效果運用於文本類型的對象就可以實現一行一行地顯示文本的效果


  二. 手風琴

  在拉幕式的動畫中當畫面整個顯示後再把畫面從兩邊往中間慢慢遮住如此不斷循環象拉手風琴一樣實現時需加入一個變量STATE用以表明此時的狀態具體程序如下

procedure TFormTimerTimer(Sender: TObject);
begin
   if state=  then
      if (dbimageleft >) then
         begin
           dbimageleft:=dbimageleft;
           dbimagewidth:=DBImagewidth+;
         end
       else
          //當幕完全拉開後改變狀態變量
         state:=
   else
    //從兩邊往中間拉
       if  dbimageleft< formwidth  div then
        begin
           dbimageleft:=dbimageleft+;
           dbimagewidth:=dbimagewidth;
        end
        else
           //當幕合上後改變狀態變量
           state:=;
end;


  三. 柵欄式

  畫面初始被豎直柵欄遮住然後各條柵欄逐漸變窄被柵欄分割的畫面逐漸完整起來在這種動畫中柵欄的角色由STATICTEXT類型的對象來充當(畫面呈現幾條柵欄就需要幾個STATICTEXT對象)只需改變STATICTEXT類型對象的LEFT 和 WIDTH屬性即可(LEFT逐漸變大WIDTH逐漸變小)在TIMER的ONCLICK事件上對每一個STATICTEXT對象如下處理

      if  stwidth >  then //ST是STACTICTEXT類型的一個對象
        begin
         stwidth:=stwidth;
         stleft:=stleft+ ;
        end
      else
        //再一次循環
         begin
          stwidth:=;  //WIDTH和LEFT由實際情況決定
          stleft:=;
         end;
    
  如果把上面的柵欄水平排列把LEFT改成TOP把WIDTH改成HEIGHT則成為百頁窗的效果大家有興趣的話可以試試


  四. 翻頁

  這是一種旋轉的效果實際上是把TOP的值固定改變HEIGHT的值並把STRETCH的值設為TRUE在TIMER的ONTIME事件中鍵入以下程序可以實現向上翻頁

    if  dbimageheight >  then
            dbimageheight:=dbimageheight

  若把上面程序中的HEIGHT的屬性值從小變到大則實現向下翻頁的效果若把TOP改成LEFT把HEIGHT改成WIDTH則實現左右翻頁的效果如果把LEFT和WIDTH一起同時改變則可以使圖片以的某一條通過圖片的豎直線為軸進行旋轉在TIMER的ONTIMER事件中程序如下

procedure TFormTimerTimer(Sender: TObject);
begin
  if state=    then
     if dbimagewidth >  then
        begin
        //畫面逐漸變小
        dbimageleft:=dbimageleft+;
        dbimagewidth:=dbimagewidth;
        //width的改變值必須是left改變值的兩倍
        end
     else
        state:=
  else
     if dbimagewidth<   then
        begin
          dbimageleft:=dbimageleft;
          dbimagewidth:=dbimagewidth+;
        end
     else
       state:=

end;

  從以上程序可以看出這是把畫面變小後再慢慢變大變小是一個狀態(STATE=變在是另一個狀態(STATE=這兩種狀態交替出現即可出現動畫


  五. 從畫面外逐漸移(飛)過

  在設計封面的時候經常需要把某標題從某個畫面上飛過 要實現該類型的動畫實際上只需改變標題的TOP(垂直方向飛過)或LEFT屬性(水平方向飛過)

  例如實現一個標題在一幅畫上從左往右飛過先在FORM裡建立一個圖形對象DBIMAGE和文字對象STATICTEXT(注意TEXT類型的對象無法顯示在圖片上)把位置和大小大小尺寸設好然後在FORM裡建立一個TIME對象TIME把其ENABLED屬性設為TRUEINTERVAL屬性設為並在事件ONTIME裡鍵入如下語句

    procedure TFormTimerTimer(Sender: TObject);
begin
   if statictextleft< dbimagewidth+dbimageleft  then
     statictextleft:=statictextleft+
   else
     statictextleft:=dbimageleft;
     //當標題飛出圖片後使標題重新位於圖片的左邊
      再一次從左向右入屏幕
end;

  說明如果只想使標題從左向右移動一次ELSE語句改為Timerenabled:=false; 數值是標題移動的速度值可以隨意更改若標題只移到圖片的某一位置則把statictextleft< dbimagewidth+dbimageleft改為statictextleft< 位置值並把ELSE語句改為Timerenabled:=false; 只需把LEFT的值從大變到小則實現從右往左飛過把上面的LEFT改為TOP把WIDTH改為HEIGHT即可實現垂直方向的動畫


  六. 逐漸顯示(即把圖片從某一個邊界逐漸拉出來)

  實現這一類型的動畫不但要改變TOPLEFT屬性還要改變HEIGHT和WIDTH屬性把一幅畫從右邊往左邊拉(右切入)在上例中以DBIMAGE為例這時要把Dbimage的center和stretch屬性設為FALSE圖片的左邊界放在FORM的右邊界處WIDTH設為

    procedure TFormtimerTimer(Sender: TObject);
begin
       if  dbimageleft >then
            begin
             dbimageleft:=dbimageleft;
             dbimagewidth:=dbimagewidth+;
//LEFT的改變值與WIDTH的改變值必須一樣
             end
        else
          begin
             dbimageleft:=formwidth;
             dbimagewidth:=;
          end;
end;

  說明把上面的LEFT改為TOPWIDTH改為HEIGHT即可實現從下往上拉(下切入)若只切入到某一點可以把Dbimageleft >中的改為設定點的坐標並把ELSE 語句改為 Timerenabled:=false;

  盡管DELPHI提供了不少關於動畫方面的開發工具但是只要稍稍修改一下屬性即可輕輕松松地實現常見的一些特技顯示你願意試一下嗎?


From:http://tw.wingwit.com/Article/program/Delphi/201311/25078.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.