<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

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

      [摘要]林穎 在DELPHI中的所有對象中都有提供了TOP、LEFT、HEIGHT、WIDTH四個屬性,用以控制對象的位置和大。涣硗庠贒ELPHI中還提供了一個TIME的構件,利用他們可以方便地實...
      林穎

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

      ---- 一. 拉幕

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

          if (dbimage1.left >0) then
               begin
                  dbimage1.left:=dbimage1.left-1;
                 dbimage1.width:=DBImage1.width+2;
                 //dbimage1.width的改變值必須是dbimage1.left改變值的2倍
               end
            else  
               timer1.enabled:=false;//拉幕結束。
      ---- 把上面程序中的LEFT改為TOP,WIDTH改為HEIGHT就可以實現豎直方向的拉幕。如果把拉幕這種效果運用于文本類型的對象,就可以實現一行一行地顯示文本的效果。

      ---- 二. 手風琴

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

      procedure TForm1.Timer1Timer(Sender: TObject);
      begin
         if state=1  then
            if (dbimage1.left >0) then
               begin
                 dbimage1.left:=dbimage1.left-1;
                 dbimage1.width:=DBImage1.width+2;
               end
             else
                //當幕完全拉開后,改變狀態變量
               state:=2
         else
          //從兩邊往中間拉
             if  dbimage1.left< form1.width  div 2 then
              begin
                 dbimage1.left:=dbimage1.left+1;
                 dbimage1.width:=dbimage1.width-2;
              end
              else
                 //當幕合上后,改變狀態變量
                 state:=1;
      end;
      ---- 三. 柵欄式

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

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

      ---- 四. 翻頁

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

          if  dbimage1.height >0  then
                  dbimage1.height:=dbimage1.height-4;
      ---- 若把上面程序中的HEIGHT的屬性值從小變到大,則實現向下翻頁的效果。若把TOP改成LEFT,把HEIGHT改成WIDTH,則實現左右翻頁的效果。如果把LEFT和WIDTH一起同時改變,則可以使圖片以的某一條通過圖片的豎直線為軸進行旋轉,在TIMER1的ONTIMER事件中,程序如下:

      procedure TForm1.Timer1Timer(Sender: TObject);
      begin
        if state=1    then
           if dbimage1.width >0  then
              begin
              //畫面逐漸變小
              dbimage1.left:=dbimage1.left+1;
              dbimage1.width:=dbimage1.width-2;
              //width的改變值必須是left改變值的兩倍
              end
           else
              state:=2
        else
           if dbimage1.width< 250  then
              begin
                dbimage1.left:=dbimage1.left-1;
                dbimage1.width:=dbimage1.width+2;
              end
           else
             state:=1

      end;
      ---- 從以上程序可以看出,這是把畫面變小后再慢慢變大,變小是一個狀態(STATE=1),變在是另一個狀態(STATE=2),這兩種狀態交替出現,即可出現動畫。

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

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

      ---- 例如實現一個標題在一幅畫上從左往右飛過。先在FORM1里建立一個圖形對象DBIMAGE1和文字對象STATICTEXT1(注意TEXT類型的對象無法顯示在圖片上),把位置和大小大小尺寸設好。然后在FORM1里建立一個TIME對象TIME1,把其ENABLED屬性設為TRUE,INTERVAL屬性設為10;并在事件ONTIME里鍵入如下語句:

          procedure TForm1.Timer1Timer(Sender: TObject);
      begin
         if statictext1.left< dbimage1.width+dbimage1.left  then
           statictext1..left:=statictext1.left+3
         else
           statictext1.left:=dbimage1.left;
           //當標題飛出圖片后,使標題重新位于圖片的左邊,
            再一次從左向右入屏幕
      end;
      ---- 說明:

      如果只想使標題從左向右移動一次,ELSE語句改為Timer1.enabled:=false;

      數值3是標題移動的速度值,可以隨意更改

      若標題只移到圖片的某一位置,則把“statictext1.left< dbimage1.width+dbimage1.left”改為“statictext1.left< 位置值”,并把ELSE語句改為Timer1.enabled:=false;

      只需把LEFT的值從大變到小,則實現從右往左飛過

      把上面的LEFT改為TOP,把WIDTH改為HEIGHT,即可實現垂直方向的動畫。
      ---- 六. 逐漸顯示(即把圖片從某一個邊界逐漸拉出來)

      ---- 實現這一類型的動畫不但要改變TOP、LEFT屬性,還要改變HEIGHT和WIDTH屬性。 例:把一幅畫從右邊往左邊拉(右切入)。在上例中以DBIMAGE1為例。這時要把Dbimage1的center和stretch屬性設為FALSE。圖片的左邊界放在FORM1的右邊界處,WIDTH設為0。

          procedure TForm1.timer1Timer(Sender: TObject);
      begin
             if  dbimage1.left >0then
                  begin
                   dbimage1.left:=dbimage1.left-3;
                   dbimage1.width:=dbimage1.width+3;
      //LEFT的改變值與WIDTH的改變值必須一樣
                   end
              else
                begin
                   dbimage1.left:=form1.width;
                   dbimage1.width:=0;
                end;
      end;
      ---- 說明:

      把上面的LEFT改為TOP,WIDTH改為HEIGHT即可實現從下往上拉(下切入)。

      若只切入到某一點,可以把“Dbimage1.left >0”中的0改為設定點的坐標,并把ELSE 語句改為 Timer1.enabled:=false;
      ---- 盡管DELPHI提供了不少關于動畫方面的開發工具,但是只要稍稍修改一下屬性即可輕輕松松地實現常見的一些特技顯示,你愿意試一下嗎?



      日韩精品一区二区三区高清