ใน VISUALBAISC5.0 คุณสามารถใช้วิธีการเล่นไฟล์วิดีโอแอนิเมชั่น (*.AVI) เพื่อเพิ่มเอฟเฟ็กต์แอนิเมชันให้กับซอฟต์แวร์ของเรา แต่จะทำให้ได้เอฟเฟ็กต์วิดีโอแบบภาพซ้อนภาพในซอฟต์แวร์ได้อย่างไร หลังจากการสำรวจของผู้เขียน ฉันพบว่าเอฟเฟกต์นี้สามารถทำได้โดยใช้ฟังก์ชัน API mciExecute, mciSendString และ SetWindowPos ของ WIDOWS95
ด้านล่างนี้ ผู้เขียนใช้วิธีการที่ใช้กันทั่วไปในการวางภาพขนาดเล็กบนภาพขนาดใหญ่เป็นตัวอย่างเพื่อแสดงวิธีการนำวิดีโอภาพซ้อนภาพไปใช้
1. สร้างแบบฟอร์ม เข้าสู่สภาพแวดล้อมระบบ VISUALBAISC5.0 และสร้างแบบฟอร์มใหม่ FORM1
2. สร้างหน้าต่างวิดีโอ ในที่นี้ผู้เขียนใช้กล่องรูปภาพสองกล่อง (PictureBox) กล่องใหญ่และกล่องเล็กเป็นหน้าต่างวิดีโอ เลือกตัวควบคุม PictureBox ในกล่องเครื่องมือควบคุม และดึงกล่องสองกล่อง (Picture1 และ Picture2) ออกมาในแบบฟอร์ม ในจำนวนนั้น Picture1 เป็นหน้าจอขนาดใหญ่และเล่นไฟล์ AVI01.AVI ส่วน Picture2 เป็นหน้าจอขนาดเล็กและเล่นไฟล์ AVI02.AVI
3. เขียนสคริปต์สำหรับการควบคุมที่เกี่ยวข้อง
โมดูลทั่วไป:
ประกาศ FunctionmciExecuteLib "winmm.dll" (ByVallpstrCommandAsString) AsLong
ประกาศ FunctionmciSendStringLib "winmm.dll" นามแฝง "mciSendStringA" (ByVallpstrCommandAsString, ByVallpstrReturnStringAsString, ByValuReturnLengthAsLong, ByValhwndCallbackAsLong) AsLong
ประกาศ FunctionSetWindowPosLib "user32" (ByValhwndAsLong, ByValhWndInsertAfterAsLong, ByValxAsLong, ByValyAsLong, ByValcxAsLong, ByValcyAsLong, ByValwFlagsAsLong) AsLong
เปิดใช้งานกระบวนการ FORM1:
DimAAAsLong
DimPlayAviAsLong
DimtmpValAsString
DimKeyValSizeAsLong
หนึ่งข้อผิดพลาดดำเนินการต่อต่อไป
tmpVal=สตริง$(1024,0)
KeyValSize=1024
PlayAvi=mciSendString("STATUSAVI01READY" Str(Picture2.hwnd),tmpVal,KeyValSize,0)
IfPlayAvi<>263แล้ว
PlayAvi=mciExecute("ปิดAVI01")
สิ้นสุดถ้า
tmpVal=สตริง$(1024,0)
KeyValSize=1024
PlayAvi=mciSendString("OPENAVI01.AVIALIASAVI01TYPEAVIVIDEOSTYLECHILDPARENT" Str(Picture2.hwnd) "รอ",tmpVal,KeyValSize,0)
x1Pos=รูปภาพ1.ความกว้าง
y1Pos=รูปภาพ1.ความสูง
tmpVal=สตริง$(1024,0)
KeyValSize=1024
AA=mciSendString("STATUSAVI01WINDOWHANDLEWAIT",tmpVal,KeyValSize,0)
ถ้า(Asc(กลาง(tmpVal,KeyValSize,1))=0)แล้ว
tmpVal=ซ้าย(tmpVal,KeyValSize-1)
อื่น
tmpVal=ซ้าย(tmpVal,KeyValSize)
สิ้นสุดถ้า
AA=SetWindowPos(tmpVal,0,0,0,x1Pos,y1Pos,0)
AA=mciExecute("WINDOWAVI01STATESHOW")
tmpVal=สตริง$(1024,0)
KeyValSize=1024
PlayAvi=mciSendString("STATUSAVI02READY" Str(Picture1.hwnd),tmpVal,KeyValSize,0)
IfPlayAvi<>263แล้ว
PlayAvi=mciExecute("CLOSEAVI02")
สิ้นสุดถ้า
tmpVal=สตริง$(1024,0)
KeyValSize=1024
PlayAvi=mciSendString("OPENAVI02.AVIALIASAVI02TYPEAVIVIDEOSTYLECHILDPARENT" Str(Picture1.hwnd) "รอ",tmpVal,KeyValSize,0)
x1Pos=รูปภาพ2.ความกว้าง
y1Pos=รูปภาพ2.ความสูง
tmpVal=สตริง$(1024,0)
KeyValSize=1024
AA=mciSendString("STATUSAVI02WINDOWHANDLEWAIT",tmpVal,KeyValSize,0)
ถ้า(Asc(กลาง(tmpVal,KeyValSize,1))=0)แล้ว
tmpVal=ซ้าย(tmpVal,KeyValSize-1)
อื่น
tmpVal=ซ้าย(tmpVal,KeyValSize)
สิ้นสุดถ้า
AA=SetWindowPos(tmpVal,0,0,0,x1Pos,y1Pos,0)
MciExecute"WINDOWAVI02STATESHOW"
MciExecute"PLAYAVI01REPEAT"
MciExecute"PLAYAVI02REPEAT"
OnErrorGoTo0
กระบวนการ QueryUnload ของ FORM1:
mciExecute"STOPAVI01"
mciExecute"STOPAVI02"
mciExecute"CLOSEAVI01"
mciExecute"CLOSEAVI02"
เมื่อคุณรันโปรแกรมนี้ คุณจะเห็นว่ามีการเล่นภาพเคลื่อนไหวสองภาพพร้อมกัน เพื่อให้ได้เอฟเฟ็กต์ภาพซ้อนภาพของวิดีโอ โปรแกรมข้างต้นทำงานได้สำเร็จใน VISUALBAISC5.0 และ WINDOWS95 -