本文介紹用Delphi制作實現隨機的圖形動畫效果,點擊窗體上的“開始”按鈕,窗體中的圖形將不斷發生變化,同時圖形的顏色也不斷變幻,形成一種圖形動畫的效果。點擊“停止”按鈕,圖形則停止變化,點擊“退出”按鈕,退出該程序。
實現動畫效果的設計思路:
本例用到的控件主要是Shape 控件、Timer 控件和BitBtn 控件等。動畫技術是現代計算機應用領域最為活躍、發展最快的部分之一。動畫的實現需要兩個要素,一是圖形的產生,二是圖形的變化。Delphi提供了解決這兩個問題的良好方案,利用Shape 控件可以產生常見的各種圖形,利用Timer 控件的OnTimer 事件則可以精確地控制動畫產生的時間。
程序設計步驟:
使用Delphi 提供的Shape 控件可以產生一些常用的圖形形狀,如橢圓、矩形、圓角方形等。Shape 控件類似於Image 控件,可以為圖形的顯示提供容器。本例中首先在窗體上創建了一個Shape 控件和一個Timer 控件。產生圖形動畫的基本原理是每隔一定的時間對窗體上的Shape 控件的形狀、顏色和填充的內容等各種參數進行改變,改變的方式由系統產生的隨機數確定,而時間參數則是由Timer 控件的Interval 屬性決定。最後在窗體中添加幾個BitBtn 控件,控制動畫的開始和停止,同時控制程序的退出。
1.新建工程:
(1)啟動Delphi 6.0 程序。選擇“文件”菜單下的“新建”命令,從彈出的子菜單中選擇Application 選項,則出現新建工程的Form1 窗口。
(2)選擇“文件”菜單下的“工程另存為”命令,彈出Save Unit1 As 對話框。在“保存在”列表框中選擇需要存放該窗口文件所在的目錄名;在“文件名”編輯框中填寫文件名,這裡填寫“Unit1”,點擊“保存”按鈕,保存上面的選項。
(3)執行上一步後,將彈出“工程另存為”對話框。在“保存在”列表框中選擇需要存放該工程的目錄名,最好和第(2)步選取相同的目錄;在“文件名”編輯框中填寫保存處理該工程的源代碼的文件名,這裡填寫“Project1”,點擊“保存”按鈕,保存上面的選項。
2.修改窗口:
(1)激活Unit1 窗口,在“屬性”面板中設置該窗體的Caption 屬性為“隨機圖形動畫”,Name 屬性為“Form1”。
(2)選擇“附加”頁上的Shape 選項,在窗體中添加1 個Shape 控件,在“屬性”面板中設置各種合適的屬性。
(3)選擇“系統”頁上的Timer 選項,在窗體中添加一個Timer 控件,在“屬性”面板中設置其Enable 屬性為True,Interval 屬性為500,即表示時間間隔為0.5 秒,Name為Timer1。
(4)選擇“附加”頁上的BitBtn 選項,在窗體中添加3 個BitBtn 控件,在“屬性”面板中點擊Glyph 屬性右邊的按鈕,從彈出的對話框中為按鈕選擇合適的圖標,設置其Caption 屬性分別為“開始”、“停止”和“退出”。
Delphi實現動畫效果的代碼分析:
(1)程序中定義了一個布爾型變量Start,用Start 來決定是否開始隨機動畫,利用Randomize 語句來實現隨機事件,相應的Timer 控件的OnTimer 事件代碼如下:
procedure TForm1.Timer1Timer(Sender: TObject); begin if start then begin Randomize; Form1.shape1.Brush.Color:=RGB(random(255),random(255),random(255)); Randomize; //隨機設置畫筆模式 case random(8) of 0:Form1.Shape1.Brush.Style:=bsSolid; 1:Form1.Shape1.Brush.Style:=bsBdiagonal; 2:Form1.Shape1.Brush.Style:=bsVertical; 3:Form1.Shape1.Brush.Style:=bsFdiagonal; 4:Form1.Shape1.Brush.Style:=bsDiagCross; 5:Form1.Shape1.Brush.Style:=bsCross; 6:Form1.Shape1.Brush.Style:=bsHorizontal; 7:Form1.Shape1.Brush.Style:=bsClear; end; randomize; Form1.Shape1.pen.Color:=RGB(random(255),random(255),random(255)); randomize; Form1.shape1.pen.Width:=random(10)+1; randomize; //隨機設置繪圖模式 case random(16) of 0:Form1.shape1.pen.mode:=pmBlack; 1:Form1.shape1.pen.mode:=pmNotxor; 2:Form1.shape1.pen.mode:=pmXor; 3:Form1.shape1.pen.mode:=pmNotMask; 4:Form1.shape1.pen.mode:=pmNotMerge; 5:Form1.shape1.pen.mode:=pmMerge; 6:Form1.shape1.pen.mode:=pmMaskNotPen; 7:Form1.shape1.pen.mode:=pmMaskPenNot; 8:Form1.shape1.pen.mode:=pmMaskNotPen; 9:Form1.shape1.pen.mode:= pmMergePenNot; 10:Form1.shape1.pen.mode:=pmMergeNotpen; 11:Form1.shape1.pen.mode:=pmNotCopy; 12:Form1.shape1.pen.mode:=pmCopy; 13:Form1.shape1.pen.mode:=pmNot; 14:Form1.shape1.pen.mode:=pmNop; 15:Form1.shape1.pen.mode:=pmWhite; end; Randomize; //隨機設置繪圖風格 case random(7) of 0:Form1.shape1.Pen.Style:=psSolid; 1:Form1.shape1.Pen.Style:=psDash; 2:Form1.shape1.Pen.Style:=psDot; 3:Form1.shape1.Pen.Style:=psDashDot; 4:Form1.shape1.Pen.Style:=psDashDotDot; 5:Form1.shape1.Pen.Style:=psClear; 6:Form1.shape1.Pen.Style:=psInsideFrame; end; randomize; //設置Shape 控件的形狀,共有6 種形狀可選 case random(7) of 0:Form1.shape1.shape:=stRectangle; 1:Form1.shape1.shape:=stSquare; 2:Form1.shape1.shape:=stRoundRect; 3:Form1.shape1.shape:=stRoundSquare; 4:Form1.shape1.shape:=stEllipse; 5:Form1.shape1.shape:=stCircle; end; end; end;
(2)“開始”和“停止”按鈕用來控制隨機動畫的開始和停止,其實就是控制布爾型變量Start 的值:
procedure TForm1.BitBtn1Click(Sender: TObject); begin start:=true;//圖形動畫開始 end; procedure TForm1.BitBtn2Click(Sender: TObject); begin start:=False;//圖形動畫停止 end;
(3)退出程序的操作很簡單,只需Close 語句即可實現:
procedure TForm1.BitBtn3Click(Sender: TObject); begin Close; end;