程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 在VB應用軟件中實現動畫效果

在VB應用軟件中實現動畫效果

編輯:VB綜合教程
在開發VB應用程序中,加入了動畫之後可使軟件具有生動活潑的效果,而且,在編寫組態軟件中,動畫功能更是必不可少,如容器中容量的變化、液體液面的變化等,實際也是一種動畫效果。在中科院空間中心開發的“電場和電導率監測網中心站專家系統”中,有多處使用動畫效果,現簡明介紹如下。

----一、使用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->

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