Запуск видеофайла с определенной временной позиции
Добавлено: 20 Апрель 2016, 22:03
				
				Функция:
Некоторые вызовы.
Старт:
Пауза:
Останов:
Старт с произвольного места:
Как-то так. Для начала покатило. Привязку к окну не допилил. Видимо, вот это не сделал:
			Код: Выделить всё
PlayMedia            PROCEDURE  (LOC:File, LOC:From, LOC:Duration) ! Declare Procedure
LOC:SoundName        CSTRING(256)                          !
LOC:mciCommand       CSTRING(256)                          !
LOC:mciReturn        CSTRING(256)                          !
LOC:Extention        CSTRING(4)                            !
  CODE
! Включение или выключение звука
! Пауза
 if Loc:File='#'
   LOC:mciCommand = 'pause video'
!   LOC:mciCommand = 'pause sound'
   mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
   return(1)
 elsif LOC:File='>'
   if LOC:From
     LOC:mciCommand = 'play video from ' & LOC:From
     mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
   else   
     LOC:mciCommand = 'play video'
     mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
   end   
   return 1
 elsif LOC:File='!'
   LOC:mciCommand = 'stop video'
   mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
   LOC:mciCommand = 'close all'
   mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
   return 1
 elsif LOC:File='?'   
   LOC:mciCommand = 'set video time format milliseconds'
   mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
   LOC:mciCommand = 'status video length'
   mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
   duration# = LOC:mciReturn 
   return duration#
 elsif LOC:File='??'   
   LOC:mciCommand = 'status video position'
   mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
   duration# = LOC:mciReturn 
   return duration#
 end
 ! Проверим, есть ли вообще звуковые каналы
 LOC:mciCommand = 'capability waveaudio can play'
 mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
 if upper(LOC:mciReturn)<>'TRUE'
  return 0
 end
 LOC:mciCommand = 'status video mode'
 mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
 LOC:mciCommand = 'stop video'
 mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
 LOC:mciCommand = 'close all'
 mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
 if ~LOC:File
   return 0
 end   
 LOC:SoundName = clip(LOC:File)
 LOC:Extention = upper( sub( LOC:File, len( clip(LOC:File) ) -2, 3) )
 case LOC:Extention
   of 'WAV' 
   orof 'MP3' 
   orof 'OGG' 
!   orof 'MP4' 
   orof 'M4A' 
   orof 'WMA'
               LOC:mciCommand = 'open "' & LOC:SoundName & '" alias sound'
               mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
               LOC:mciCommand = 'play sound'
               if LOC:From
                 LOC:mciCommand = LOC:mciCommand & ' from ' & LOC:From * 10
               end
               If LOC:Duration
                 LOC:mciCommand = LOC:mciCommand & ' to ' & (LOC:From + LOC:Duration) * 10
               End
               mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
  of 'AVI'
               LOC:mciCommand = 'open "' & LOC:SoundName & '" alias sound'
               mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
               LOC:mciCommand = 'play sound fullscreen'
               mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
  of 'MP4' 
               LOC:mciCommand = 'open "' & LOC:SoundName & '" type mpegvideo alias video' ! Parent ' & 0{prop:Handle} & ' style child'
               mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
               LOC:mciCommand = 'play video'
               mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
 end
 return 1
Старт:
Код: Выделить всё
if LOC:SoundFile2=LOC:SoundFile and LOC:Status=2
  if PlayMedia('>')
    LOC:Status = 1
  end
else  
  LOC:SoundFile2 = LOC:SoundFile
  if PlayMedia(LOC:SoundFile)
    LOC:Status = 1
    LOC:Duration = PlayMedia('?')
    ?Image2{prop:Hide} = False
  end  
end
Код: Выделить всё
if PlayMedia('#')
  LOC:Status = 2
end  
Код: Выделить всё
if PlayMedia('!')
  LOC:Status = 0
  ?Image2{prop:Hide} = True
  ?Image2{prop:at,3} = 0
end
Код: Выделить всё
x# = mousex() - ?Image1{prop:at,1}
from# = x# * LOC:Duration / ?Image1{prop:at,3}
if PlayMedia('>', from#)
end
Код: Выделить всё
 MciCmd = 'put ' & Vname & ' window client at ' & |
              Loc:N{Prop:Xpos}  & ' ' & |
              Loc:N{Prop:Ypos}   & ' ' & |
              W & ' ' & H