В VISUALBAISC5.0 вы можете использовать метод воспроизведения файлов видеоанимации (*.AVI) для добавления анимационных эффектов в наше программное обеспечение, но как добиться эффекта «картинка в картинке» в программе? После исследования автора я обнаружил, что этого эффекта можно достичь с помощью функций API 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"Псевдоним"mciSendStringA"(ByVallpstrCommandAsString,ByVallpstrReturnStringAsString,ByValuReturnLengthAsLong,ByValhwndCallbackAsLong)AsLong
DeclareFunctionSetWindowPosLib "user32"(ByValhwndAsLong,ByValhWndInsertAfterAsLong,ByValxAsLong,ByValyAsLong,ByValcxAsLong,ByValcyAsLong,ByValwFlagsAsLong)AsLong
АКТИВИРОВАТЬ процесс FORM1:
ДимAAAsLong
DimPlayAviAsLong
Димтмпваласстринг
DimKeyValSizeAsLong
Онерроррезумеследующий
tmpVal=Строка$(1024,0)
КлючВалСизе=1024
PlayAvi=mciSendString("STATUSAVI01READY" Str(Picture2.hwnd),tmpVal,KeyValSize,0)
ЕслиPlayAvi<>263Тогда
PlayAvi=mciExecute("closeAVI01")
КонецЕсли
tmpVal=Строка$(1024,0)
КлючВалСизе=1024
PlayAvi=mciSendString("OPENAVI01.AVIALIASAVI01TYPEAVIVIDEOSTYLECHILDPARENT" Str(Picture2.hwnd) "WAIT",tmpVal,KeyValSize,0)
x1Pos=Изображение1.Ширина
y1Pos=Изображение1.Высота
tmpVal=Строка$(1024,0)
КлючВалСизе=1024
AA=mciSendString("STATUSAVI01WINDOWHANDLEWAIT", tmpVal,KeyValSize,0)
Если(Asc(Mid(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)
КлючВалСизе=1024
PlayAvi=mciSendString("STATUSAVI02READY" Str(Picture1.hwnd),tmpVal,KeyValSize,0)
ЕслиPlayAvi<>263Тогда
PlayAvi=mciExecute("CLOSEAVI02")
КонецЕсли
tmpVal=Строка$(1024,0)
КлючВалСизе=1024
PlayAvi=mciSendString("OPENAVI02.AVIALIASAVI02TYPEAVIVIDEOSTYLECHILDPARENT" Str(Picture1.hwnd) "WAIT",tmpVal,KeyValSize,0)
x1Pos=Изображение2.Ширина
y1Pos=Изображение2.Высота
tmpVal=Строка$(1024,0)
КлючВалСизе=1024
AA=mciSendString("STATUSAVI02WINDOWHANDLEWAIT", tmpVal,KeyValSize,0)
Если(Asc(Mid(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"
Онерроргото0
Процесс QueryUnload формы FORM1:
mciExecute"STOPAVI01"
mciExecute"STOPAVI02"
mciExecute"CLOSEAVI01"
mciExecute"CLOSEAVI02"
Запустив эту программу, вы увидите, что одновременно воспроизводятся две анимации, достигая эффекта «картинка в картинке» видео. Вышеупомянутая программа успешно работает в VISUALBAISC5.0 и WINDOWS95. ->