程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> DELPHI中利用對象的常用屬性制作動畫

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

編輯:Delphi

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

  ---- 一. 拉幕

  ---- 拉幕式即從中間往兩邊慢慢顯示畫面。在此把Dbimage1的CENTER屬性設成true;把stretch屬性設成false。把WIDTH屬性設成0,適當設置LEFT的值,使其顯示在屏幕中間。實現動畫主要方法是修改LEFT屬性(值逐漸變小)和WIDTH屬性(值逐漸變大),要注意的是為了讓幕布從中間均勻地向兩邊拉開,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逐漸變小),在TIMER1的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

  計算機教程Delphi中利用對象的常用屬性制作動畫來自www.itwen.comIT WEN計算機教程網

  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;



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