У меня есть такой сервис. На экране Электронного Киоска при бездействии включается просмотр видео и фоток (не важно чего) из определённого каталога.
Делаю так.
Сначала считываем содержимое каталога в очередь:
Код: Выделить всё
ZZZ{prop:SQL} = 'select n.VAL ' & |
'from NASTR n ' & |
'where n.PARAM=''ETScreenSaverDir'''
if ~Access:ZZZ.Next()
directory(LOC:FileQueue,clip(ZZZ.A1) & '*.*',ff_:NORMAL)
LOC:FileQueueRecords = records(LOC:FileQueue)
loop i#=LOC:FileQueueRecords to 1 by -1
get(LOC:FileQueue,i#)
LOC:FileName = clip(ZZZ.A1) & clip(LOC:FileQueue.Name)
PathSplit(LOC:FileName, , , , LOC:FileExtension)
if clip(LOC:FileExtension)<>'.bmp' and clip(LOC:FileExtension)<>'.jpg' and clip(LOC:FileExtension)<>'.jpeg' and clip(LOC:FileExtension)<>'.png' |
and clip(LOC:FileExtension)<>'.pcx' and clip(LOC:FileExtension)<>'.jpg' and clip(LOC:FileExtension)<>'.wmf' and clip(LOC:FileExtension)<>'.avi' |
and clip(LOC:FileExtension)<>'.mp4' and clip(LOC:FileExtension)<>'.div' and clip(LOC:FileExtension)<>'.divx' and clip(LOC:FileExtension)<>'.mkv' |
and clip(LOC:FileExtension)<>'.mov' and clip(LOC:FileExtension)<>'.vob' and clip(LOC:FileExtension)<>'.wmv'
delete(LOC:FileQueue)
if error()
stop(error())
end
else
LOC:FileQueue.Name = LOC:FileName
put(LOC:FileQueue)
if error()
stop(error())
end
end
end
Потом в таймере (прошу прощения за некоторую обрезку, что-то очень много текста, боюсь будет сложно понять). Идёт проверка на время бездействия. Если пора включать проигрывание, то:
Код: Выделить всё
if LOC:FileCounter=LOC:FileQueueRecords
LOC:FileCounter = 1
else
LOC:FileCounter += 1
end
get(LOC:FileQueue, LOC:FileCounter)
LOC:FileName = clip(LOC:FileQueue.Name)
PathSplit(LOC:FileName, , , , LOC:FileExtension)
if clip(LOC:FileExtension)='.bmp' or clip(LOC:FileExtension)='.jpg' or clip(LOC:FileExtension)='.jpeg' or clip(LOC:FileExtension)='.png' |
or clip(LOC:FileExtension)='.pcx' or clip(LOC:FileExtension)='.jpg' or clip(LOC:FileExtension)='.wmf'
?Image1{prop:NoHeight} = True
?Image1{prop:NoWidth} = True
?IMAGE1{prop:Text} = clip(LOC:FileQueue.Name)
x1# = ?PANEL1{prop:At, 3}
x2# = ?Image1{prop:At, 3}
if x2#>x1# ! ?IMAGE1{prop:at,3}>?PANEL1{prop:at,3}
?Image1{prop:at,4} = ?Image1{prop:at,4}/?Image1{prop:at,3}*?PANEL1{prop:at,3}
?Image1{prop:at,3} = ?PANEL1{prop:at, 3}
end
x1# = ?PANEL1{prop:At, 4}
x2# = ?Image1{prop:At, 4}
if x2#>x1#
?Image1{prop:at,3} = ?Image1{prop:at,3}/?Image1{prop:at,4}*?PANEL1{prop:at,4}
?Image1{prop:at,4} = ?PANEL1{prop:at,4}
end
?Image1{prop:at,1} = ?PANEL1{prop:at,1} + (?PANEL1{prop:at,3} - ?Image1{prop:at,3}) / 2
?Image1{prop:at,2} = ?PANEL1{prop:at,2} + (?PANEL1{prop:at,4} - ?Image1{prop:at,4}) / 2
LOC:FileType = 0
else
LOC:FileType = 1
?IMAGE1{prop:Hide} = True
LOC:mciCommand = 'open "' & clip(LOC:FileName) & '" type mpegvideo alias video parent ' & 0{prop:Handle} & ' style child'
err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
if err#
MessageLite('Ошибка проигрывания видео!!!', 'Ошибка открытия видео. Err #' & err#, 500)
end
LOC:X = ?PANEL1{prop:at,1}
LOC:Y = ?PANEL1{prop:at,2}
LOC:mciCommand = 'put video window client at ' & LOC:X & ' ' & LOC:Y & ' ' & ?PANEL1{prop:at,3} & ' ' & ?PANEL1{prop:at,4}
err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
if err#
MessageLite('Ошибка проигрывания видео!!!', 'Ошибка клиентского окна. Err #' & err#, 500)
end
LOC:mciCommand = 'play video'
err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
if err#
MessageLite('Ошибка проигрывания видео!!!', 'Ошибка проигрывания видео. Err #' & err#, 500)
end
LOC:mciCommand = 'set video time format milliseconds'
err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
LOC:mciCommand = 'status video length'
err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
LOC:Duration = LOC:mciReturn
end
Если уже идёт проигрывание, то:
Код: Выделить всё
LOC:mciCommand = 'status video position'
err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
LOC:Position = LOC:mciReturn
if (LOC:Position>=LOC:Duration)
if LOC:FileCounter=LOC:FileQueueRecords
LOC:FileCounter = 1
else
LOC:FileCounter += 1
end
get(LOC:FileQueue, LOC:FileCounter)
LOC:FileName = clip(LOC:FileQueue.Name)
PathSplit(LOC:FileName, , , , LOC:FileExtension)
if clip(LOC:FileExtension)='.bmp' or clip(LOC:FileExtension)='.jpg' or clip(LOC:FileExtension)='.jpeg' or clip(LOC:FileExtension)='.png' |
or clip(LOC:FileExtension)='.pcx' or clip(LOC:FileExtension)='.jpg' or clip(LOC:FileExtension)='.wmf'
LOC:mciCommand = 'status video mode'
err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
LOC:mciCommand = 'stop video'
err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
LOC:mciCommand = 'close all'
err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
LOC:FileType = 0
?Image1{prop:NoHeight} = True
?Image1{prop:NoWidth} = True
?IMAGE1{prop:Text} = clip(LOC:FileQueue.Name)
x1# = ?PANEL1{prop:At, 3}
x2# = ?Image1{prop:At, 3}
if x2#>x1# ! ?IMAGE1{prop:at,3}>?PANEL1{prop:at,3}
?Image1{prop:at,4} = ?Image1{prop:at,4}/?Image1{prop:at,3}*?PANEL1{prop:at,3}
?Image1{prop:at,3} = ?PANEL1{prop:at, 3}
end
x1# = ?PANEL1{prop:At, 4}
x2# = ?Image1{prop:At, 4}
if x2#>x1# ! ?Image1{prop:at,4}>?PANEL1{prop:at,4}
?Image1{prop:at,3} = ?Image1{prop:at,3}/?Image1{prop:at,4}*?PANEL1{prop:at,4}
?Image1{prop:at,4} = ?PANEL1{prop:at,4}
end
?Image1{prop:at,1} = ?PANEL1{prop:at,1} + (?PANEL1{prop:at,3} - ?Image1{prop:at,3}) / 2
?Image1{prop:at,2} = ?PANEL1{prop:at,2} + (?PANEL1{prop:at,4} - ?Image1{prop:at,4}) / 2
?IMAGE1{prop:Hide} = False
LOC:Clock = clock()
LOC:FileType = 0
else
LOC:mciCommand = 'status video mode'
err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
LOC:mciCommand = 'stop video'
err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
LOC:mciCommand = 'close all'
err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
LOC:mciCommand = 'open "' & clip(LOC:FileName) & '" type mpegvideo alias video parent ' & 0{prop:Handle} & ' style child'
err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
if err#
MessageLite('Ошибка проигрывания видео!!!', 'Ошибка открытия видео. Err #' & err#, 500)
end
LOC:X = ?PANEL1{prop:at,1}
LOC:Y = ?PANEL1{prop:at,2}
LOC:mciCommand = 'put video window client at ' & LOC:X & ' ' & LOC:Y & ' ' & ?PANEL1{prop:at,3} & ' ' & ?PANEL1{prop:at,4}
err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
if err#
MessageLite('Ошибка проигрывания видео!!!', 'Ошибка клиентского окна. Err #' & err#, 500)
end
LOC:mciCommand = 'play video'
err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
if err#
MessageLite('Ошибка проигрывания видео!!!', 'Ошибка проигрывания видео. Err #' & err#, 500)
end
LOC:mciCommand = 'set video time format milliseconds'
err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
LOC:mciCommand = 'status video length'
err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
LOC:Duration = LOC:mciReturn
LOC:FileType = 1
end
Попробуйте разобраться. Если что, готов пояснить.