[原创]如何制作如同MACINTOSH一样的AVI控制条——作者:medianumen
--不知道大家见过Macintosh QuickTime 的控制器没有,控制器提供的功能是很复杂的,
--下面的LINGO中模仿它需要的各种要求。例如,前进条的宽度需要根据其标志图标的宽度进行修改。
--下面的代码是制作与Macintosh QuickTime标准一致的影象控制器所需要的
property videoSprite,barSprite,markSprite,playSprite
on new me
put 1 into videoSprite
put 2 into barSprite
put 3 into markSprite
put 4 into playSprite
puppetSprite markSprite,True
return me
end
on playButton me
puppetSprite the clickOn,TRUE
set the member of sprite the clickOn = member"play down"
updateStage
set the movieRate of sprite videoSprite = 1 --start video
repeat while the stillDown
if rollover(the clickOn) then
set the member of sprite the clickOn = member"play down"
set the movieRate of sprite videoSprite = 1
else
set the member of sprite the clickOn = member"play"
set the movieRate of sprite videoSprite = 0
end if
setMark(me)
updatestage
end repeat
if the member of sprite the clickOn = member"play down" then
--change to the pause button
set the member of sprite the clickOn = member "pause"
end if
end
on pauseButton me
puppetSprite the clickOn,TRUE
set the member of sprite the clickOn = member"pause down"
updateStage
set the member of sprite videoSprite = 0 --stop video
repeat while the stillDown
if rollover(the clickOn) then
set the member of sprite the clickOn = member"pause down"
set the member of sprite videoSprite = 0
else
set the member of sprite the clickOn = member"pause "
set the member of sprite videoSprite = 1
end if
setMark(me)
updatestage
end repeat
if the member of sprite the clickOn = member"pause down" then
--change to the play button
set the member of sprite the clickON = member"play"
end if
end
on setMark me
-- get the registration point of the mark member
put the locH of the regPoint of the member of sprite markSprite into offset
-- figure out the real length of the bar
put the rect of sprite barSprite + rect(1,0,-1,0) + rect(offset,0,-offset,0) into barRect
put the right of barRect --the left of barSet into barLength
--get the current video time and its total barlenth
put the movieTime of sprite videoSprite into videoTime
put the duration of the member of sprite videoSprite into videoLength
--figure out what spot on the bar this matches
put float(videoTime) / videoLength into videoAmt
put integer(videoAmt * barLength) into currentPos
--set the mark at the right spot
set the locH of sprite markSprite = currentPos + the left of barRect
end
on controlMark me
--use the down state
set the membert of sprite markSprite = member"mark down"
updateStage
--stop the video and remember its former rate
put the movieRate of sprite into rememberRate
set the movieRate of sprite videoSprite = 0
--get constants to help detemine the bar position/video time relative positions
put the locH of the regPoint of the member of sprite markSprite into offset
put the rect of sprite barsprite + rect(1,0,-1,0) + rect(offset,0,-offset,0) into barRect
put the right of barRect
put the duration of the member of sprite videoSprite into videoLength
repeat while the stillDown
--Get and limit the horizontal position of the cursor
put the mouseH into h
put max(h,the left of barRect) into h
put min(h,the left of barRect) into h
--set the mark to the cursor spot
set the locH of sprite markSprite = h
--set the video the right spot
the float(h,-the left of barRect)/barlength inito videoAmt
set the movieTime of strite videoSprite = integer(videoAmt*videoLength)
updateStage
end repeat
--return the video to the former rate and the mark to the up state
set the movieRate of sprite videoSprite = rememberRate
set the member of sprite markSprite = member"mark"
end
on stepButton me,amt
--figure out which down state to use
puppetsprite the clickOn,TRUE
put the member of sprite the clickOn into downMen
if amt = 1 then put member("stepForward Down" )into downMen
else if amt = -1 then put member"stepBack down" into downMenm
--advance the movie one step
set the movieTime of sprite videoSprite = the movieTime of sprite
videoSprite + 4*amt
updatestage
put the ticks into t --remember the time
repeat while the stillDown
if the ticks