----一、使用Animation控件
----在VB5.0中可以使用Animation控件實現動畫,實例如下:
PrivateSubAnimation1_Click()
WithCommonDialog1
Filter="avi(*.avi)|*.avi"
過濾器指定在對話框的文件列表框中顯示文件的類型
.ShowOpen
顯示“打開”對話框
EndWith
WithAnimation1
.Autoplay=True
----一旦將.avi文件加載到Animation控件中,則.avi文件將連續循環的自動播放。
.OpenCommonDialog1.Filename
----打開一個將要播放的.avi文件。如果AutoPlay屬性為True,則只要加載該文件便可。
EndWith
EndSub
----Animation控件不能播放含有聲音數據的.avi文件。此外,動畫控件只能顯示未壓縮的或用行程編碼(RLE)壓縮的.avi文件。當用文件調用Open方法時,如果該文件含有聲音數據,或不具備特定的壓縮格式,則返回錯誤。
----二、使用AniPushButton(AniButton)控件
----受WINDOWS/NT超級終端動畫效果的影響,筆者也希望在開發的應用軟件中加入轉動地球的效果。首先用PHOTOSHOP制作一些圖畫,地球的圖像是用一個地球儀臨摹取得的,每次將地球儀轉動一個固定的角度,得到一幅不同角度地球的圖像,重復多次,且將每一幅圖存為一個.bmp文件,供AniPushButton調用。
----AniPushButton控件包含了大量的屬性、方法、事件供開發人員使用。首先在Picture和Frame屬性中裝入圖像文件,Picture屬性可以裝入多幅圖像文件,幀Frame屬性是Picture屬性裝入圖像文件的索引,Frame屬性是1對應第一個圖像文件,注意,Frame只能從1開始,而圖像數組可以從0開始,這兩個屬性可以在屬性設計時設置,也可以在程序中設置,Picture屬性可以裝入.bmp、.ico、.wmf等文件,其他格式的圖像文件可以用PHOTOSHOP或SEA等文件進行格式轉換,在動畫的圖像文件裝入時,不是裝入一幅圖像文件,而是要在Frame屬性的控制下,裝入多幅圖像文件,Frame為1,Picture裝入第一幅圖像文件,Frame為2,Picture裝入第二幅圖像文件,依次類推,將可產生動畫效果的各種圖像依次裝入Picture屬性中。
----PicDrawMode屬性用於設置顯示圖像與裝入圖像之間的比例關系。0為控制按設計的大小裝入圖像,1為控制按圖像的大小自動調整邊框的大小,2為圖像按控制的大小放大或縮小原圖Caption屬性,為了不影響動畫的效果,這裡清空Caption屬性。
----Speed屬性,表示動態切換每幅圖的速度,以毫秒ms為單位,值越大,切換速度越慢。
----SpecialOp屬性,該屬性在設計時無效,只有在程序運行時軟件設置,為1時,表示模擬鼠標的Click操作,不由用戶操作觸發,而由系統自動觸發動畫按鈕,使控制執行Click功能,在下面的軟件中使用定時器來激活該功能。在下面的程序中,用到的一些參數值,包括Picture和Frame都是在程序中設置的,不是在屬性對話框中設置的。
PrivateSubForm_Load()
Withtimer1設定時器屬性
.Enabled=False
.Interval=600
EndWith
WithAniPushButton1設AniPushButton1各屬性
.Enabled=True激活
.Cycle=0
.Caption=""
.PictDrawMode=1按圖像的大小自動調整
.Speed=200幀切換速度
.Frame=1用LoadPicture方法給Picture屬性賦值
.Picture=LoadPicture("c:earth1.bmp")
.Frame=2
.Picture=LoadPicture("c:earth2.bmp")
.Frame=3
.Picture=LoadPicture("c:earth3.bmp")
.Frame=4
.Picture=LoadPicture("c:earth4.bmp")
.Frame=5
.Picture=LoadPicture("c:earth5.bmp")
EndWith
EndSub
SubCmd_Start_Click()開始命令按鈕啟動定時器
timer1.Enabled=-1
EndSub
SubTimer1_Timer()
AniButton1.SpecialOp=1實現鼠標的Click操作
EndSub
----三、使用PictureClip控件實現動畫
----該控件提供了存儲多個圖像信息的技術,其訪問方式不是向AniPushButton依次切換每幅圖像,而是先將多幅圖像依次有序存放在一個.bmp文件中,.bmp中的圖像將被均勻分割成許多小塊,每一塊作為動畫切換的一幅圖。
----下面的程序將實現一個轉動陀螺的動畫效果。
----在程序的聲明段定義變量:
DimyAsInteger
DimtoggleAsInteger
PrivateSubForm_Load()
picture1.Picture=PictureClip1.
GraphicCell(0)使用第一幅為開始幀
y=0
toggle=0
EndSub
PrivateSubcmd_onoff_Click()開關命令按鈕
Iftoggle=0Then
cmd_onoff.Caption="停止"
toggle=1
Else
cmd_onoff.Caption="旋轉"
toggle=0
EndIf
EndSub
PrivateSubTimer1_Timer()
Iftoggle=1Thenspin滿足條件,調圖切換子程序
EndSub
PrivateSubspin()
y=y 1:Ify=17Theny=0
picture1.Picture=PictureClip1.
GraphicCell(y)圖切換一幀
EndSub
----在上面的程序中,使用了命令按鈕、圖片控件、定時器和圖像剪切控件等功能,其中最主要的是制作圖像文件。圖像文件制作分兩個過程,首先制作單個的圖像文件,然後,將這些圖像文件合並成一個圖像文件,存於一個.bmp文件中,在圖像合成時可使用WINDOWS/95中的“畫圖”,用粘貼的方法完成。注意,在圖像合成時,應設置狀態欄參數以確定圖像的精確位置,否則,在動畫過程中,圖像會出現跳動和不穩定感。
----四、使用Image實現動畫效果
----該功能用定時器控件來控制移動和地球轉動的速度,當然,其速度還與程序中設定的步長有關系,具體程序片段如下:
PrivateSubForm_Load()
Timer_animate.inteval=100INTEVAL屬性為100ms
Timer_animate.enabled=true啟動動畫定時器
EndSub
PrivateSubTimer_animate_Timer()
Callani_Image定時調移動子程序
EndSub
SubIncrFrame()
FrameNum=FrameNum 1幀加1
IfFrameNum>5Then
最後一幀圖像顯示之後返回第一幀
FrameNum=1
EndIf
Imageearth(0).Picture=Imageearth(FrameNum).Picture
將該幀圖像賦給運動的Imageearth(0)控件的Picture屬性
EndSub
Subani_Image()控制移動子程序
SelectCaseMotion控制移動方向的變量
Case1向上和向左移動,步長50twips
Imageearth(0).MoveImageearth(0).
Left-50,Imageearth(0).Top-50
IncrFrame切換到下一幅圖
IfImageearth(0).Left<=0Then向左移動到了邊界
Motion=2向上和向右移動
ElseIfImageearth(0).Top<=0Then
Motion=4向上移動到了邊界,改向下和向左移動
EndIf
Case2向右和向上
Imageearth(0).MoveImageearth(0).Left 50,
Imageearth(0).Top-50
IncrFrame
到了右邊界,轉為向左和向上
IfImageearth(0).Left>=(startform.Width
-Imageearth(0).Width)Then
Motion=1
ElseIfImageearth(0).Top<=0Then
Motion=3向右向下
EndIf
Case3向右向下
Imageearth(0).MoveImageearth(0).Left 50,
Imageearth(0).Top 50
IncrFrame
IfImageearth(0).Left>=(startform.Width
-Imageearth(0).Width)Then
Motion=4向左向下
ElseIfImageearth(0).Top>=
(startform.Height-Imageearth(0).Height)-680Then
Motion=2向右向上,其中680twips是標題和菜單的高度
EndIf
Case4向左向下
Imageearth(0).MoveImageearth(0).Left-50,
Imageearth(0).Top 50
IncrFrame
IfImageearth(0).Left<=0Then
是否到了左邊界,如到了轉向右向下
Motion=3
是否到了下邊界
ElseIfImageearth(0).Top>=(startform.Height
-Imageearth(0).Height)-680Then
Motion=1向左向上
EndIf
EndSelect
EndSub->