程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi Shape 控件、Timer 控件實現圖形移動動畫效果

Delphi Shape 控件、Timer 控件實現圖形移動動畫效果

編輯:Delphi

Delphi實現圖形的移動動畫效果,本程序實現了對一個圖形對象或同時對多個圖形對象的移動控制。用戶可以通過列表框指定移動哪些圖形(圓、橢圓、正方形、長方形和圓角方形),同時用戶還可以選擇圖形移動的速度(快、中、慢)。

Delphi圖形的移動動畫效果

實現圖像移動效果所用到的控件主要是Shape 控件、ListBox 控件、Timer 控件和BitBtn 控件等。實現對圖形的移動控制,只需控制圖形的位置即可。本例就是通過Timer 控件的OnTimer 事件來不斷改變Shape 圖形的位置來實現對其移動的控制。本例中另一個重要的控件是ListBox,ListBox 控件從父類繼承了一個屬性Selected,它包含一個指向列表項的索引號ListBox[],並返回一個是否選中的邏輯值,在程序代碼中依次調用即可。

設計步驟:

本例中先在窗體中用Panel 控件創建一個具有立體感的邊框作為加載圖形的容器。圖形對象的移動是通過改變它們在窗體上的位置來實現的,定時器由Timer 控件提供,通過設置不同的Interval 屬性可以得到圖形不同的移動速度。在列表框中提供了供選取的圖形對象的名稱,如何將列表框中的選擇反映到程序代碼中就顯得比較重要。

(1)啟動Delphi 6.0 程序。選擇“文件”菜單下的“新建”命令,從彈出的子菜單中選擇Application 選項,則出現新建工程的Form1 窗口。

(2)選擇“文件”菜單下的“工程另存為”命令,彈出Save Unit1 As 對話框。在“保存在”列表框中選擇需要存放該窗口文件所在的目錄名;在“文件名”編輯框中填寫文件
名,這裡填寫“Unit1”,點擊“保存”按鈕,保存上面的選項。

(3)執行上一步後,將彈出“工程另存為”對話框。在“保存在”列表框中選擇需要存放該工程的目錄名,最好和第(2)步選取相同的目錄;在“文件名”編輯框中填寫保存處理該工程的源代碼的文件名,這裡填寫“Project1”,點擊“保存”按鈕,保存上面的選項。

(4)激活Unit1 窗口,在“屬性”面板中設置該窗體的Caption 屬性為“圖形動畫”,Name 屬性為“Form1”。

(5)選擇“標准”頁上的Panel 選項,在窗體中添加1 個Panel 控件,調整其合適的大小和位置。在“屬性”面板中設置其Align 屬性為“alTop”,設置BevelInner 和BevelOuter屬性均為“bvBlovewred”,BorderStyle 設置為“bsSingle”,BevelWidth 和BorderWidth均設置為1,使作為圖形容器的Panel 控件看起來有立體感。

(6)選擇“附加”頁上的Shape 選項,在窗體中添加5 個Shape 控件,調整其合適的大小和位置。在“屬性”面板中設置其Shape 屬性分別為stCircle(圓)、stEllipses(橢圓)、Rectanglest(矩形)、Square(正方形)和Rsquare(圓角方形)。為了使代碼易讀,此處將各個Shape 控件的Name 屬性分別設為對應的英文名:Circle、Ellipse、Rectangle、Square 和Rsquare。在Brush 屬性中包括Color 顏色和Style 樣式,為各個Shape 控件選擇不同的Brush 屬性。

(7)選擇“系統”頁上的Timer 選項,在窗體中添加1 個Timer 控件,在“屬性”面板中設置其Enable 屬性為False,Interval 屬性設置為1000,Name 為Timer1。

(8)再給窗體中添加一個ComboBox 控件和一個ListBox 控件,在“屬性”面板中點擊Items 屬性右邊的按鈕,在對話框中設置合適的選項。

(9)選擇“附加”頁上的BitBtn 選項,為窗體中添加三個BitBtn 控件,調整其合適的大小和位置,在“屬性”面板中設置其各種屬性。

具體的代碼+分析:

(1)本程序的關鍵是控制被選定圖形的移動,這利用Timer 控件的OnTimer 事件來實現,分別對選中的不同圖形進行位置移動的操作:

procedure TForm1.Timer1Timer(Sender: TObject);//圖形隨時間變化而移動
begin
//選擇正方形時,相應的圖形開始移動
if listbox1.selected[0]then
square.left:=(square.left+2)mod panel1.Width;
//選擇長方形時,相應的圖形開始移動
if listbox1.selected[1]then
rect.left:=(rect.left+2)mod panel1.Width;
//選擇圓時,相應的圖形開始移動
if listbox1.selected[2]then
circle.left:=(circle.left+2)mod panel1.Width;
//選擇橢圓時,相應的圖形開始移動
if listbox1.selected[3]then
ellipse.left:=(ellipse.left+2)mod panel1.Width;
//選擇圓角方形時,相應的圖形開始移動
if listbox1.selected[4]then
RSquare.left:=(RSquare.left+2)mod panel1.Width;
end;

(2)圖形移動的速度是由Timer 控件的Interval 屬性來控制的,在程序中選擇不同的速度後,由Start 開始按鈕賦值給Timer 控件的Interval 屬性:

procedure TForm1.startClick(Sender: TObject);//選擇不同的速度,定時器響應的時間間隔不同
begin
//選擇速度為慢時
if ComboBox1.Text=’慢’ then
Timer1.interval:=100
//選擇速度為快時
else if ComboBox1.Text=’快’ then
Timer1.interval:=5
//選擇速度為中時
else
Timer1.interval:=25;
//定時器開始工作
Timer1.Enabled:=true;
end;

(3)停止圖形移動時,只需設置Timer 的Enable 屬性為False 即可:

procedure TForm1.stopClick(Sender: TObject);
begin
//定時器停止工作,圖形停止移動
Timer1.Enabled:=False;
end;
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved