| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3252 人关注过本帖
标题:求助随机显示图片并且播放mp3
只看楼主 加入收藏
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
怎么看着这句像是“悟空,你又到处流窜了,坏坏啦”?

我们都在路上。。。。。
2011-09-20 13:40
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
肯定不是作业帖,但我也不大相信是山区帖。他一直在看都不作声,你替人家急。

授人以渔,不授人以鱼。
2011-09-20 13:48
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
有道理,静观其变,偶不急,呵呵。

我们都在路上。。。。。
2011-09-20 13:51
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 

* 调用示例:
* ------------------------------------------------
* 1、播放媒体文件(只播一次)
= PlayMicList( [Z:\OKSong\高胜美\记得我们有约.mpg], .F. )
Return
* 2、播放文件列表(循环播放)
Local lcSysPath
lcSysPath = Addb(Justpath(Sys(16,1)))
= PlayMicList( Filetostr( Addb(lcSysPath)+[PlayMicList.txt] ), .T. )
Return
* ------------------------------------------------
* 主体代码:
* ------------------------------------------------
Function PlayMicList( tcPlayListStr, tlISRePlayMic )
    * ------------------------------------------------
    * 功能: 主函数,播放媒体文件或文件列表串
    * 参数: tcPlayListStr - 播放文件列表字符串,文件间用回车换行符分隔
    *       tISRePlayMic  - 是否循环播放列表,默认为.T.
    * ------------------------------------------------
    If Type([tcPlayListStr])=[C]
        If !Empt(tcPlayListStr)
            If Vartype(_Screen.MicTime) = [O]
                _Screen.RemoveObject([MicTime])
            Endif
            _Screen.AddObject([MicTime], [MicTime])
            With _Screen.MicTime
                If Para()=2 And Vartype(tlISRePlayMic) = [L]
                    .ISRePlayMic = tlISRePlayMic
                Endif
                Local lcCR, lcList, lnFile, liFile, lcFile
                lcCR = Chr(13) + Chr(10)
                lcList = lcCR + tcPlayListStr + lcCR
                lnFile = Occu( lcCR, lcList ) - 1
                For liFile = 1 To lnFile
                    lnBeg = At( lcCR, lcList, liFile ) + 2
                    lnEnd = At( lcCR, lcList, liFile + 1 )
                    lcFile = Subs( lcList, lnBeg, lnEnd-lnBeg )
                    If File(lcFile)
                        If MicCanBeOpen(lcFile) > 0
                            .nMicCount = .nMicCount + 1
                            Dime .aMicList(.nMicCount)
                            .aMicList(.nMicCount) = lcFile
                        Endif
                    Endif
                Endfor
                = SendMciString( [Close MICTEMP] )
                = SendMciString( [Close MICVFPPLAY] )
                .Enabled = .T.
            Endwith
        Endif
    Endif
Endfunc
Function MicCanBeOpen( tcFileName )
    tcFileName = Iif(Type([tcFileName])=[C], tcFileName, [])
    Local lnMicLength
    lnMicLength = 0
    If SendMciString( [Open ] + GetShortFile(tcFileName) + [ Alias MICTEMP] )#[MicError]
        lnMicLength = Val( SendMciString([Status MICTEMP Length]) ) && 取媒体长度
        = SendMciString( [Close MICTEMP] )
    Endif
    Return lnMicLength
Endfunc
Function OpenAndPlayMicFile( tcPlayFile )
    tcPlayFile = Iif(Type([tcPlayFile])=[C],tcPlayFile,[])
    If !Empt(tcPlayFile) And File(tcPlayFile)
        Local lcShotFile, lnVideoHwnd
        lcShotFile = GetShortFile(tcPlayFile)
        = SendMciString( [Close MICVFPPLAY] )
        = SendMciString( [Open ] + lcShotFile + [ Alias MICVFPPLAY] )
        lnMicLength = Val(SendMciString( [Status MICVFPPLAY Length] ) )
        = SendMciString( [Play MICVFPPLAY From 0] )
    Endif
Endfunc
Function SendMciString( tcMCIcmd )
    Declare Integer mciSendString     In WINMM String, String, Integer,Integer
    Declare Integer mciGetErrorString In WINMM Integer, String, Integer
    Local lcRetStr, lcErrStr, lnRetVal
    lcRetStr = Space( 80)
    lnRetVal = mciSendString( tcMCIcmd, @lcRetStr, Len(lcRetStr), 0 )
    If lnRetVal = 0
        Return Trim(Strtran(lcRetStr,Chr(0),[]))
    Else
        Return [MicError]
    Endif
Endfunc
Function GetShortFile( tcPathFileName )
    tcPathFileName = Iif(Type([tcPathFileName])=[C],tcPathFileName,[])
    Local lcRetuShotFile, lnRetuShotFile
    Declare Integer GetShortPathName In kernel32 String, String, Integer
    lcRetuShotFile = Space(255)
    lnRetuShotFile = GetShortPathName(tcPathFileName, @lcRetuShotFile, Len(tcPathFileName))
    lcRetuShotFile = Iif(Empt(lcRetuShotFile), tcPathFileName, Left(lcRetuShotFile, lnRetuShotFile) )
    Return lcRetuShotFile
Endfunc
Define Class MicTime As Timer
    Interval = 1000
    Name = [MicTime]
    Enabled = .F.
    nMicCount = 0
    nMicValue = 0
    ISPlayInit = .T.
    ISRePlayMic = .T.
    Dime aMicList(1)
    aMicList(1) = []
    Procedure Timer
        With This
            lnMicLength = Val(SendMciString( [Status MICVFPPLAY Length] ) )    && 取媒体总长度
            lnMicPosition = Val(SendMciString( [Status MICVFPPLAY Position]) ) && 取当前的播放位置
            If lnMicPosition >= lnMicLength
                = SendMciString( [Close MICVFPPLAY] )
                If .nMicCount = 0
                    .Enabled = .F.
                Else
                    If .ISPlayInit
                        .nMicValue = 1
                        .ISPlayInit = .F.
                        = OpenAndPlayMicFile( .aMicList(.nMicValue) )
                    Else
                        If .nMicCount <= .nMicValue
                            If .ISRePlayMic
                                .nMicValue = 1
                                = OpenAndPlayMicFile( .aMicList(.nMicValue) )
                            Else
                                .Enabled = .F.
                            Endif
                        Else
                            .nMicValue = .nMicValue + 1
                            = OpenAndPlayMicFile( .aMicList(.nMicValue) )
                        Endif
                    Endif
                Endif
            Endif
        Endwith
    Endproc
Enddefine

我们都在路上。。。。。
2011-09-20 13:54
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
他示例中的代码,好象是来自网络的,写得不错,用了一个timer类。其它全是jpg和mp3文件和一个db数据文件。

我们都在路上。。。。。
2011-09-20 13:58
a1999zqw
Rank: 1
等 级:新手上路
帖 子:186
专家分:0
注 册:2009-4-3
收藏
得分:0 
晕死了,一会儿山区的电教,一会儿作业帖,就是想给城里幼儿园的小朋友做个小程序,教学之用而已,mp3的代码是我从网上搜索出来的,如果我能编那段我想也用不着让大家帮忙了,mp3.prg我试过能用才上传的,希望能少占用大家的时间和精力,再次感谢大家的关注,谢谢!
2011-09-20 21:34
dapinetree
Rank: 2
等 级:论坛游民
帖 子:29
专家分:34
注 册:2011-9-11
收藏
得分:7 
实际需求出思路,不错!实现应该不成问题,如需有关VFP的技术料可联系,zibowanglong@
2011-09-20 23:41
panpende
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:528
专家分:963
注 册:2009-4-27
收藏
得分:7 

做一个表单,含有方式1、方式2、下一组、播放、返回、退出等按钮。含有图像控件IMAGE1、IMAGE2、IMAGE3、IMAGE4,设置 VISIBLE=.F. 。

在‘方式1’按钮的CLICK方法中,有以下代码:
  TC=1 &&表示运行方式1
  USE 图片名字.dbf
  T1=ALLT(A1)
  REPL B EITH 1
  THISFORM.Image1.Picture=T1 &&如果图片不在当前目录,请加路径。
  THISFORM.Image1.VISIBLE=.T.

上述代码的效果是显示第一幅图片。然后点击‘播放’按钮,播放相应的音乐。这方面的代码暂时不写,我觉得是否有比较简单的播放代码。

按‘下一组’按钮,显示下一幅图片。在下一组’按钮的CLICK方法中,有以下代码:
  结束音乐播放(代码暂时不写)
  IF TC=1
  LOCA FOR B =0
  IF EOF()
  REPL ALL B WITH 0
  GO TOP
  ENDI
  REPL B EITH 1
  THISFORM.Image1.Picture=T1 &&如果图片不在当前目录,请加路径。
  ELSE  
  *'方式2’的代码
  ENDI

上述代码的效果是在‘方式1’时,结束当前音乐播放,继续显示下一幅图片,并且实现循环显示图片。

在‘返回’按钮的CLICK方法中,有以下代码:

  TC=0 &&归0,以便切换‘方式1’、‘方式2’。
  THISFORM.Image1.VISIBLE=.F.
  THISFORM.Image2.VISIBLE=.F.
  THISFORM.Image3.VISIBLE=.F.
  THISFORM.Image4.VISIBLE=.F.

仅供参考。








  







2011-09-21 08:42
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
回复 16楼 a1999zqw
很不解,既然你试过mp3这段代码能用,说明你还是懂一些vfp,外行是肯定不懂怎么使用这段代码的,那为什么不试试自己写写呢?功能并不难,程序在写的过程中哪里遇到了难题?什么地方写不出来,用这种方式在坛子里提问比较好吧?不要什么都伸手,坛子里据我观察,一般都不会帮伸手党的。

即使你真的不会VFP,以我从前学习过的经验来看,VFP入门比起C简单多了,都是四字命令,界面支持GDI+绘图,控件拖拉几下就出来了,学习起来也不难。所以虽然偶可以帮你用C/C++实现你想要的功能,但偶还是希望你亲自动手,丰衣足食。

如果你觉得偶上面说得很直,有点伤面子,请不要介意,偶是属于有话直说的人,还请海涵。

我们都在路上。。。。。
2011-09-21 11:42
a1999zqw
Rank: 1
等 级:新手上路
帖 子:186
专家分:0
注 册:2009-4-3
收藏
得分:0 
我是用下面代码试的
acce'  兔子--1    老虎--2 ' to x
if x='1'
= PlayMicList( [C:\dongwu\兔子.mp3], .F. )
= PlayMicList( [C:\dongwu\兔子.mp3], .F. )
else
= PlayMicList( [C:\dongwu\老虎.mp3], .F. )
= PlayMicList( [C:\dongwu\兔子.mp3], .F. )
endi
我学的是foxbase最早最基础的部分,编个程也只是dos版的(是哪位网友说的,忘了),就上面那段还有问题呢----怎么只播放一遍。什么界面支持GDI,什么绘图,什么控件都不知是何物,电脑里的vfp我是当它foxbase用的,你要用C/C++完成那我更头大了,下次想再增加记录或删除记录都不会了,还是谢谢hellovfp!原想在十一前就能给小朋友用上,不知能否了
2011-09-21 21:59
快速回复:求助随机显示图片并且播放mp3
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017372 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved