Delphi中所有對像都提供了Top、Left、Height、Width四個屬性,用以控制對象的位置和大小;另外在Delphi中還提供了一個Time的構件,利用它們可以方便地實現一些動畫。
弧⒗幕
幕式即從中間往兩邊慢慢顯示畫面。在此把dbimage1的center屬性設成true;把stretch屬性設成false。把Width屬性設成0,適當設置Left的值,使其顯示在屏幕中間。實現動畫主要方法是修改Left屬性(值逐漸變小)和Width屬性(值逐漸變大),要注意的是為了讓幕布從中間均勻地向兩邊拉開,Width的改變值必須是Left改變值的2倍。在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屬性設為TrueInterval屬性設為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;
得鰨
1.如果只想使標題從左向右移動一次,Else語句改為Timer1.enabled:=false;
2. 數值3是標題移動的速度值,可以隨意更改;
3. 若標題只移到圖片的某一位置,則把“statictext1.left<dbimage1.width+dbimage1.left”改為“statictext1.left<位置值”,並把Else語句改為Timer1.enabled:= false;
4. 只需把Left的值從大變到小,則實現從右往左飛過;
5. 把上面的Left改為Top,把Width改為Height,即可實現垂直方向的動畫。