في VISUALBAISC5.0، يمكنك استخدام طريقة تشغيل ملفات الفيديو المتحركة (*.AVI) لإضافة تأثيرات الرسوم المتحركة إلى برنامجنا، ولكن كيف يمكن تحقيق تأثير صورة داخل صورة للفيديو في البرنامج؟ بعد استكشاف المؤلف، وجدت أنه يمكن تحقيق هذا التأثير باستخدام وظائف واجهة برمجة التطبيقات mciExecute وmciSendString وSetWindowPos الخاصة بـ WIDOWS95.
فيما يلي، يأخذ المؤلف الطريقة الأكثر استخدامًا وهي تركيب صورة صغيرة على صورة كبيرة كمثال لتوضيح طريقة تنفيذ فيديو صورة داخل صورة.
1. قم بإنشاء نموذج. أدخل بيئة النظام VISUALBAISC5.0 وقم بإنشاء نموذج جديد FORM1.
2. قم بإنشاء نافذة فيديو. يستخدم المؤلف هنا صندوقي صور (PictureBox)، أحدهما كبير والآخر صغير، كنافذة للفيديو. حدد عنصر التحكم PictureBox في "مربع أدوات التحكم" واسحب الصندوقين (Picture1 وPicture2) في النموذج. من بينها، Picture1 عبارة عن شاشة كبيرة وتقوم بتشغيل ملف AVI01.AVI؛ أما Picture2 فهي عبارة عن شاشة صغيرة وتقوم بتشغيل ملف AVI02.AVI.
3. اكتب البرنامج النصي لعنصر التحكم المقابل.
الوحدات المشتركة:
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
تفعيل عملية FORM1:
ديماااس لونغ
DimPlayAviAsLong
DimtmpValAsString
DimKeyValSizeAsLong
OnErrorResumeNext
tmpVal=سلسلة$(1024,0)
حجم المفتاح = 1024
PlayAvi=mciSendString("STATUSAVI01READY" Str(Picture2.hwnd),tmpVal,KeyValSize,0)
IfPlayAvi<>263ثم
PlayAvi=mciExecute("CloseAVI01")
EndIf
tmpVal=سلسلة$(1024,0)
حجم المفتاح = 1024
PlayAvi=mciSendString("OPENAVI01.AVIALIASAVI01TYPEAVIVIDEOSTYLECHILDPARENT" Str(Picture2.hwnd) "WAIT",tmpVal,KeyValSize,0)
x1Pos=Picture1.Width
y1Pos=صورة1.الارتفاع
tmpVal=سلسلة$(1024,0)
حجم المفتاح = 1024
AA=mciSendString("STATUSAVI01WINDOWHANDLEWAIT"،tmpVal,KeyValSize,0)
إذا (تصاعدي (Mid (tmpVal، KeyValSize، 1)) = 0) ثم
tmpVal=يسار(tmpVal,KeyValSize-1)
آخر
tmpVal=يسار(tmpVal,KeyValSize)
EndIf
AA=SetWindowPos(tmpVal,0,0,0,x1Pos,y1Pos,0)
AA=mciExecute("WINDOWAVI01STATESHOW")
tmpVal=سلسلة$(1024,0)
حجم المفتاح = 1024
PlayAvi=mciSendString("STATUSAVI02READY" Str(Picture1.hwnd),tmpVal,KeyValSize,0)
IfPlayAvi<>263ثم
PlayAvi=mciExecute("CLOSEAVI02")
EndIf
tmpVal=سلسلة$(1024,0)
حجم المفتاح = 1024
PlayAvi=mciSendString("OPENAVI02.AVIALIASAVI02TYPEAVIVIDEOSTYLECHILDPARENT" Str(Picture1.hwnd) "WAIT"،tmpVal,KeyValSize,0)
x1Pos=Picture2.Width
y1Pos=Picture2.Height
tmpVal=سلسلة$(1024,0)
حجم المفتاح = 1024
AA=mciSendString("STATUSAVI02WINDOWHANDLEWAIT"،tmpVal,KeyValSize,0)
إذا (تصاعدي (Mid (tmpVal، KeyValSize، 1)) = 0) ثم
tmpVal=يسار(tmpVal,KeyValSize-1)
آخر
tmpVal=يسار(tmpVal,KeyValSize)
EndIf
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. ->