In VISUALBAISC5.0 können Sie die Methode zum Abspielen von Videoanimationsdateien (*.AVI) verwenden, um Animationseffekte zu unserer Software hinzuzufügen, aber wie erreicht man den Video-Bild-in-Bild-Effekt in der Software? Nach der Untersuchung des Autors stellte ich fest, dass dieser Effekt durch die Verwendung der API-Funktionen mciExecute, mciSendString und SetWindowPos von WIDOWS95 erzielt werden kann.
Im Folgenden verwendet der Autor die am häufigsten verwendete Methode zum Überlagern eines kleinen Bildes mit einem großen Bild als Beispiel, um die Implementierungsmethode von Video-Bild-in-Bild zu veranschaulichen.
1. Erstellen Sie ein Formular. Rufen Sie die VISUALBAISC5.0-Systemumgebung auf und erstellen Sie ein neues Formular FORM1.
2. Erstellen Sie ein Videofenster. Hier verwendet der Autor zwei Bildboxen (PictureBox), eine große und eine kleine, als Videofenster. Wählen Sie das PictureBox-Steuerelement in der Steuerelement-Toolbox aus und ziehen Sie zwei Felder (Bild1 und Bild2) im Formular heraus. Darunter ist Bild1 ein großer Bildschirm und spielt die Datei AVI01.AVI ab; Bild2 ist ein kleiner Bildschirm und spielt die Datei AVI02.AVI ab.
3. Schreiben Sie das Skript für das entsprechende Steuerelement.
Gemeinsame Module:
DeclareFunctionmciExecuteLib"winmm.dll"(ByVallpstrCommandAsString)AsLong
DeclareFunctionmciSendStringLib"winmm.dll"Alias"mciSendStringA"(ByVallpstrCommandAsString,ByVallpstrReturnStringAsString,ByValuReturnLengthAsLong,ByValhwndCallbackAsLong)AsLong
DeclareFunctionSetWindowPosLib"user32"(ByValhwndAsLong,ByValhWndInsertAfterAsLong,ByValxAsLong,ByValyAsLong,ByValcxAsLong,ByValcyAsLong,ByValwFlagsAsLong)AsLong
AKTIVIEREN-Prozess von FORM1:
DimAAAsLong
DimPlayAviAsLong
DimtmpValAsString
DimKeyValSizeAsLong
OnErrorResumeNext
tmpVal=String$(1024,0)
KeyValSize=1024
PlayAvi=mciSendString("STATUSAVI01READY" Str(Picture2.hwnd),tmpVal,KeyValSize,0)
IfPlayAvi<>263Then
PlayAvi=mciExecute("closeAVI01")
EndIf
tmpVal=String$(1024,0)
KeyValSize=1024
PlayAvi=mciSendString("OPENAVI01.AVIALIASAVI01TYPEAVIVIDEOSTYLECHILDPARENT" Str(Picture2.hwnd) "WAIT",tmpVal,KeyValSize,0)
x1Pos=Bild1.Breite
y1Pos=Bild1.Höhe
tmpVal=String$(1024,0)
KeyValSize=1024
AA=mciSendString("STATUSAVI01WINDOWHANDLEWAIT",tmpVal,KeyValSize,0)
If(Asc(Mid(tmpVal,KeyValSize,1))=0)Then
tmpVal=Left(tmpVal,KeyValSize-1)
Anders
tmpVal=Left(tmpVal,KeyValSize)
EndIf
AA=SetWindowPos(tmpVal,0,0,0,x1Pos,y1Pos,0)
AA=mciExecute("WINDOWAVI01STATESHOW")
tmpVal=String$(1024,0)
KeyValSize=1024
PlayAvi=mciSendString("STATUSAVI02READY" Str(Picture1.hwnd),tmpVal,KeyValSize,0)
IfPlayAvi<>263Then
PlayAvi=mciExecute("CLOSEAVI02")
EndIf
tmpVal=String$(1024,0)
KeyValSize=1024
PlayAvi=mciSendString("OPENAVI02.AVIALIASAVI02TYPEAVIVIDEOSTYLECHILDPARENT" Str(Picture1.hwnd) "WAIT",tmpVal,KeyValSize,0)
x1Pos=Bild2.Width
y1Pos=Bild2.Höhe
tmpVal=String$(1024,0)
KeyValSize=1024
AA=mciSendString("STATUSAVI02WINDOWHANDLEWAIT",tmpVal,KeyValSize,0)
If(Asc(Mid(tmpVal,KeyValSize,1))=0)Then
tmpVal=Left(tmpVal,KeyValSize-1)
Anders
tmpVal=Left(tmpVal,KeyValSize)
EndIf
AA=SetWindowPos(tmpVal,0,0,0,x1Pos,y1Pos,0)
MciExecute"WINDOWAVI02STATESHOW"
MciExecute"PLAYAVI01REPEAT"
MciExecute"PLAYAVI02REPEAT"
OnErrorGoTo0
QueryUnload-Prozess von FORM1:
mciExecute"STOPAVI01"
mciExecute"STOPAVI02"
mciExecute"CLOSEAVI01"
mciExecute"CLOSEAVI02"
Wenn Sie dieses Programm ausführen, können Sie sehen, dass zwei Animationen gleichzeitig abgespielt werden, wodurch der Bild-in-Bild-Effekt des Videos erzielt wird. Das obige Programm läuft erfolgreich in VISUALBAISC5.0 und WINDOWS95. ->