精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● VFP>>〖源码共赏〗>>〖MP3 和 VCD 播放器的源代码〗>>MP3 和 VCD 播放器的源代码.这个例子供面向对象编程参考.(二)

主题:MP3 和 VCD 播放器的源代码.这个例子供面向对象编程参考.(二)
发信人: coolyylu(GoodDay)
整理人: hunter__fox(2002-03-16 20:43:18), 站内信件
播放列表对象:

*----   定义播放歌曲列表
DEFINE CLASS SongList as BaseForm 
     oPlayer = .F.
     cDir = ""
     oRoot = .F.   
     ShowWindow = 2    
     nDisTitle = 15
     ADD OBJECT cmdHelp As CommandButton WITH SpecialEffect = 2 ,Caption = '?' ,Width = 15
     ADD OBJECT PROTECTED lstList as listbox WITH SpecialEffect = 1
     
     PROCEDURE init 
        this.lstList.width = this.Width 
        this.lstList.height = this.Height - This.nDisTitle
        this.lstList.Top = This.nDisTitle  
        
        this.cmdHelp.Left = This.Width - this.cmdHelp.Width
        this.cmdHelp.Height = This.nDisTitle
        IF NOT FILE("SongList.dbf")
            CREATE TABLE SongList FREE ( Name C(50) ,FileName C(200) ,Song M)
         ENDIF 
         IF NOT FILE("Scheme.dbf")
            CREATE TABLE Scheme FREE (Name c(50) ,FileName c(200))            
            IF USED("Scheme")
               USE IN Scheme 
            ENDIF 
         ENDIF                 
     ENDPROC 
  
     *---- 改变窗口尺寸的时候
     PROCEDURE Resize 
        this.lstList.width = this.Width 
        this.lstList.height = this.Height - This.nDisTitle
        
        this.cmdHelp.Left = This.Width - this.cmdHelp.Width
        
        IF TYPE('This.oRoot.oPanel') = 'O'
         IF This.oRoot.oPanel.lStick
            This.oRoot.oPanel.Stick()
         ENDIF      
      ENDIF
     ENDPROC 
     
     PROCEDURE LoadSongList
        LPARAMETERS tcDir
         IF NOT USED("SongList")
            USE SongList IN 0 EXCLUSIVE 
         ENDIF   
         SELECT SongList
         *----获取目录
         IF EMPTY(tcDir)
            this.cDir = GETDIR()
         ELSE 
            this.cDir = tcDir
         ENDIF 
         *---- 如果目录不存在
         IF NOT DIRECTORY(this.cDir)
            RETURN 0
         ENDIF 
         IF EMPTY(this.cDir)
            RETURN 0
         ENDIF 
         IF EMPTY(this.cDir)
             USE IN SongList         
             RETURN 
         ENDIF  
         this.cDir =  ADDBS(this.cDir)
         nCount = ADIR(aFile ,this.cDir + "*.mp3","A")         
         FOR i = 1 TO nCount             
            INSERT INTO SongList (Name , FileName ,Song) Values(JUSTSTEM(JUSTFNAME(aFile[i,1])) ,this.cdir + aFile[i,1] ,"")
         ENDFOR 
         
         nCount = ADIR(aFile ,this.cDir + "*.dat","A")
         
         FOR i = 1 TO nCount             
            INSERT INTO SongList (Name , FileName ,Song) Values(JUSTSTEM(JUSTFNAME(aFile[i,1])) ,this.cdir + aFile[i,1] ,"")
         ENDFOR              
         WITH this.lstList
              .RowSourceType = 6
              .RowSource = "SongList.Name"
              .Visible = .T.
         ENDWITH         
         this.lstList.Refresh()
     ENDPROC     
     *---- 点击歌曲列表时播放歌曲
     PROCEDURE lstList.click 
         *---- 播放当前文件 
         thisform.play()
     ENDPROC 
     *---- 播放文件
     PROCEDURE Play
        IF NOT USED("SongList")
           RETURN 0
        ENDIF 
        IF NOT FILE(ALLTRIM(SongList.FileName))
           MESSAGEBOX("检查路径" + JUSTPATH(ALLTRIM(SongList.FileName)) + ;
                     "是否存在文件" +  JUSTFNAME(ALLTRIM(SongList.FileName)) ,16 ,"错误")
           RETURN 0
        ENDIF 
        thisform.oPlayer.FileName = ALLTRIM(SongList.FileName)
         DO CASE 
         CASE INLIST(JUSTEXT(ALLTRIM(SongList.FileName)) ,"DAT" ,"MPG")
              thisform.oPlayer.parent.show()
         OTHERWISE 
              thisform.oPlayer.parent.hide()
         ENDCASE      
     ENDPROC 
     *---- 右键歌曲列表框时
     PROCEDURE lstList.MouseUP
        LPARAMETERS nButton ,nShift ,nX ,nY
         IF nButton = 2 
          IF NOT ThisForm.oRoot.oPanel.lStick
             ThisForm.oRoot.oPanel.Show(thisform.Top + nY ,thisform.Left + nX)
          ELSE 
             ThisForm.oRoot.oPanel.Show()
          ENDIF 
         ENDIF 
     ENDPROC 
     
     *---- 帮助按钮 ,简单说明用法
     PROCEDURE cmdHelp.Click
         
     
     ENDPROC 
     *---- 删除歌曲
     PROCEDURE DelSong
        SELECT SongList
        DELETE 
        PACK 
     ENDPROC 
       
     PROCEDURE ReName     
        IF NOT USED("SongList")
           RETURN 0
        ENDIF 
        This.oRoot.oSongList.Show()
        oReName = NEWOBJECT("GetName")
        oReName.SetName(ALLTRIM(SongList.Name))
        oReName.Show()
        IF NOT EMPTY(oReName.NewName)
           REPLACE Name WITH oReName.NewName
        ENDIF 
        oReName.Release
     ENDPROC 
     *---- 加载MTV 或VCD故事片
     PROCEDURE LoadMTV
         DIMENSION aCDROM[1]
         
         nCD = This.GetCDROM(@aCDROM)
         FOR m.i = 1 TO nCD
             cMTVDIR = aCDROM[nCD] + 'MPEGAV\'
             IF DIRECTORY(cMTVDIR)
                THISFORM.LoadSongList(cMTVDIR)
             ENDIF 
         ENDFOR 
     ENDPROC 
     *---- 获得CDROM的光驱符号
     PROCEDURE GetCDROM
         LPARAMETERS taCDROM
         nCDROM = 0
         FOR nDrive = 68 TO 68 + 22 
             IF DRIVETYPE(CHR(nDrive)) = 5
                nCDROM = nCDROM + 1
                DIMENSION taCDROM[nCDROM]
                taCDROM[nCDROM] = CHR(nDrive) + ":\"
             ENDIF 
         ENDFOR 
         *---- 返回光驱驱动器的个数
         RETURN nCDROM
     ENDPROC 
     *---- 设置根对象引用释放
     PROCEDURE Destroy
       this.oRoot = .F.
       IF USED("SongList")
           SELECT SongList 
           ZAP 
           USE IN SongList
       ENDIF  
     ENDPROC 
     *---- 当位置改变的时候 ,如果操作面板处于粘附的状态 ,则操作面板随播放列表窗口移动
     PROCEDURE Left_Assign
        LPARAMETERS nLeft       
        This.Left = nLeft
        
        IF TYPE('This.oRoot.oPanel') = 'O'
         IF This.oRoot.oPanel.lStick
            This.oRoot.oPanel.Stick()
         ENDIF      
        ENDIF 
     ENDPROC 
     *---- 当位置改变的时候 ,如果操作面板处于粘附的状态 ,则操作面板随播放列表窗口移动
     PROCEDURE Top_Assign
      LPARAMETERS nTop
      This.Top = nTop
      
      IF TYPE('This.oRoot.oPanel') = 'O'
         IF This.oRoot.oPanel.lStick
            This.oRoot.oPanel.Stick()
         ENDIF      
      ENDIF
     ENDPROC       
     *---- 加载喜爱歌集
     PROCEDURE LoadFavorSong
         ThisForm.oRoot.oSongList.Show()
         oFavorSong = NEWOBJECT("ObjectList")
         oFavorSong.SetName("Name" ,"FileName" ,"Scheme" ,"选择喜爱歌集")
         oFavorSong.Show()
         IF NOT EMPTY(oFavorSong.ListName)
            IF NOT USED("SongList")
               USE SongList IN 0 EXCLUSIVE 
            ENDIF 
            SELECT SongList
            IF FILE(oFavorSong.ListName)
               APPEND FROM (oFavorSong.ListName)   
               WITH this.lstList
              .RowSourceType = 6
              .RowSource = "SongList.Name"
              .Visible = .T.
              ENDWITH         
         this.lstList.Refresh()      
            ELSE
               MESSAGEBOX("歌集不存在" ,"信息")
            ENDIF 
         ENDIF 
         oFavorSong.Release()
     ENDPROC 
     *---- 保存喜爱歌集
     PROCEDURE SaveFavorSong
         ThisForm.oRoot.oSongList.Show()        
          cFavorDir = "c:\mysong\"
          *---- 存放喜爱歌曲集的目录          
          IF NOT DIRECTORY(cFavorDir)
             MD (cFavorDir)
          ENDIF 
          *---- 让用户输入喜欢的歌曲集的名称
        
          oSaveFile = NEWOBJECT("GetName")
          oSaveFile.SetName("喜爱" + TTOC(DATETIME()) ,"保存歌集:")
          oSaveFile.Show()
          IF NOT EMPTY(oSaveFile.NewName)
           IF NOT USED("Scheme")
             USE Scheme IN 0 EXCLUSIVE 
          ENDIF 
          SELECT Scheme 
          cFileName = cFavorDir + FORCEEXT(SYS(2015) ,"dbf")
          INSERT INTO SCHEME(Name ,FileName) VALUES(oSaveFile.NewName ,cFileName)
          USE IN Scheme 
          *---- 拷贝喜爱的歌曲集
              SELECT SongList 
              COPY TO (cFileName)
          ENDIF 
          oSaveFile.Release()           
     ENDPROC 
ENDDEFINE 

[关闭][返回]