ホーム > カテゴリ > Visual Basic >

アニメーションコントロールを作成する

アニメーションコントロールを作成するサンプルです。

サンプルの実行画面

APIの宣言

[AVI.bas]

'CreateWindowEx=>新しいウインドウ(コントロール)を作成する
 
'<引数>
'dwExStyle:     常に0
'lpClassName:   クラス名
'lpWindowName:  ウインドウのキャプション
'dwStyle:      定数(WS_××とBS_××参照)
'x:             ウインドウのx座標
'y:             ウインドウのy座標
'nWidth:        ウインドウの幅
'nHeight:       ウインドウの高さ
'hWndParent:   親ウインドウのハンドル(親がないとき 0)
'hMenu:        メニューのハンドル
'hInstance:    モジュールのインスタンスハンドル
'lpParam:       常に0

'@戻り値@
'正常終了のときウインドウのハンドル

Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long


'DestroyWindow=>ウインドウを破棄する

'<引数>
'hWnd:CreateWindowExで作成したウインドウのハンドル

'<戻り値>
'正常終了0以外

Declare Function DestroyWindow Lib "user32" (ByVal hWnd As Long) As Long


'SendMessage=>メッセージをウインドウに送る

'<引数>
'hWnd:ウインドウのハンドル
'wMsg:定数(ACM_××参照)
'wParam:パラメータ
'lParam:パラメータ

'<戻り値>
'通常は使わない

Declare Function SendMessageString Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long


Const ANIMATE_CLASS = "SysAnimate32"   'クラス名

Const WM_USER = &H400                  'ユーザー定義
Const ACM_OPEN = WM_USER + 100         'AVIファイルを開く
Const ACM_PLAY = WM_USER + 101         'AVIファイルを再生する
Const ACM_STOP = WM_USER + 102         'AVIファイルを停止する

Const WS_EX_TRANSPARENT = &H20         '透明なウインドウを作成

Dim AvihWnd As Long    'CreateWindowExで作成されたウインドウのハンドル


'----------------------------------------------------------
'■関数名  CreateWindow
'■用途   透明なウインドウを作成してそのハンドルを取得
'■引数
'     hWnd     透明なウインドウを作成する親ウインドウのハンドル
'     X        作成するウインドウの左上隅のX座標
'     Y        作成するウインドウの左上隅のY座標
'     nWidth  作成するウインドウの横幅
'     nHeight  作成するウインドウの縦幅
'----------------------------------------------------------

Public Sub CreateWindow(hWnd As Long, _
                         X As Long, _
                          Y As Long, _
                           nWidth As Long, _
                            nHeight As Long)
                          
                          
'透明なウインドウを作成してハンドルを取得
AvihWnd = CreateWindowEx(WS_EX_TRANSPARENT, _
                      ANIMATE_CLASS, _
                      vbNullString, _
                      &H50000007, _
                      X, _
                      Y, _
                      nWidth, _
                      nHeight, _
                      hWnd, _
                      0, 0, 0)
    
End Sub


'----------------------------------------------------
'■関数名  AviPlay
'■用途   Aviファイルを再生する
'■引数
'   FileName  再生するファイル名(フルパス指定する)
'-----------------------------------------------------

Public Sub AviPlay(FileName As String)

 'AVIファイルを開く
   Call SendMessageString(AvihWnd, ACM_OPEN, 0, FileName)
  
 'AVIファイルを再生する
   Call SendMessageString(AvihWnd, ACM_PLAY, -1, 0)

End Sub


'-------------------------------
'■関数名  AviStop
'■用途    Aviファイルを停止する
'-------------------------------

Public Sub AviStop()

 'Aviファイルを停止する
   Call SendMessageString(AvihWnd, ACM_STOP, 0, 0)

End Sub


'---------------------------------------------------
'■関数名  Destroy
'■用途   ウインドウを破棄する。
'         Aviファイルを停止する
'---------------------------------------------------

Public Sub Destroy()

  
'CreateWindowExで作成されたウインドウを破棄する
  Call DestroyWindow(AvihWnd)
  
'Aviファイルが再生中であったら停止する
  Call AviStop
  
  
End Sub


APIの呼び出し

[AVI.frm]

Private Sub Play_Click()


'Aviファイルを再生する
  Call AviPlay(App.Path & "\Filecopy.avi")
 
'メニューの処理
  Play.Enabled = False
  nStop.Enabled = True
 
End Sub

Private Sub nStop_Click()

'Aviファイルを停止する
  Call AviStop

'メニューの処理
  Play.Enabled = True
  nStop.Enabled = False
   
End Sub


Private Sub Form_Load()

'透明なウインドウを作成する
  Call CreateWindow(Picture1.hWnd, 0, 0, _
           Picture1.ScaleWidth / Screen.TwipsPerPixelX, _
           Picture1.ScaleHeight / Screen.TwipsPerPixelY)

End Sub



Private Sub Form_Unload(Cancel As Integer)

'作成したウインドウを破棄、AVIファイルの停止
  Call Destroy

End Sub

ソースコード一式のダウンロード

vbapi_avi.zip 5.94 KB (6,086 バイト)

このサンプルの動作環境について

このサンプルは 「Windows98」及び「Microsoft Visual Basic 5.0 Professional Edition」で確認しております。環境が異なる場合は正常に動作しない場合もございますのでご了承下さい。





関連記事



公開日:2015年03月03日
記事NO:00318