本人菜鸟一族
    问题如下:如何在一个窗体运行的同时添加背景音乐.问题很简单,并且音乐的音量,开关,都可以控制!!!                                      我是铁杆!!!!
                                        望球!
                                      感谢!!非常感谢!!!

解决方案 »

  1.   

    Private FormOldWidth As Long   '窗体的原始宽度
    Private FormOldHeight As Long  '窗体的原始高度Public Sub ResizeInit(FormName As Form) '在调用ResizeForm前先调用本函数
      Dim Obj As Control
      FormOldWidth = FormName.ScaleWidth
      FormOldHeight = FormName.ScaleHeight
      On Error Resume Next
      For Each Obj In FormName '为每一个对象取一个别名
        Obj.Tag = Obj.Left & " " & Obj.Top & " " & Obj.Width & " " & Obj.Height & " "
      Next Obj
      On Error GoTo 0
    End SubPublic Sub ResizeForm(FormName As Form) '按比例改变窗体内各对象的大小,在调用本函数前先调用ReSizeInit函数
      Dim Pos(4) As Double
      Dim i As Long, TempPos As Long, StartPos As Long
      Dim Obj As Control
      Dim ScaleX As Double, ScaleY As Double  ScaleX = FormName.ScaleWidth / FormOldWidth    '保存窗体宽度缩放比例
      ScaleY = FormName.ScaleHeight / FormOldHeight  '保存窗体高度缩放比例
      On Error Resume Next
      For Each Obj In FormName
        StartPos = 1
        For i = 0 To 4  '读取控件的原始位置与大小
          TempPos = InStr(StartPos, Obj.Tag, " ", vbTextCompare)
          If TempPos > 0 Then
            Pos(i) = Mid(Obj.Tag, StartPos, TempPos - StartPos)
            StartPos = TempPos + 1
          Else
            Pos(i) = 0
          End If
          Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleY  '按比例重新定位对象并改变对象大小
        Next i
      Next Obj
      On Error GoTo 0
    End SubPrivate Sub Form_Load()
      Call ResizeInit(Me) '在程序装入时必须加入
    End SubPrivate Sub Form_Resize()
      Call ResizeForm(Me) '确保窗体改变时控件随之改变
    End Sub
    Private Sub CommandExit_Click()
      End
    End Sub
      

  2.   

    以上方法虽能达到要求..........但是!!!!!!也有一个缺点,那就是控件上的字体也会随之变大变小~~~~要克服这个问题还有一个方法,那就是在Form的Resize事件中重新定位所有控件的位置(也就是Top,Left)Private Sub Form_Resize()
    Text1.Top = 0
    Text1.Width = Me.Width /2 - Text1.width / 2
    End Sub这样你就可以把Text1定位到窗体的最上方的中央!但是如果控件较多,建议先放到容器(Frame,picbox)里,然后定位容器
    ~~
      

  3.   

    Public Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrRet
    Public Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long
        s = String(LenB(PathName), Chr(0))
        GetShortPathName PathName, S, Len(S)
        On Error Resume Next
        ShortPathName = Left(S, InStr(S, Chr(0)) - 1)
        mciSendString "open " & ShortPathName & " alias MyMIDI", vbNullString, 0, 0
        mciSendString "play MyMIDI", vbNullString, 0, 0
        mciSendString "play MyMidi FROM 0", 0&, 0, 0    开
        mciSendString "stop MyMidi FROM 0", 0&, 0, 0    关
    音量不会如果是wav格式是一句
       sndPlaySound 路径,&O1
      

  4.   

    liu584()  能否更详细些,本人是菜鸟
      

  5.   

    再来一便:
    Public Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrRet      ‘播放音乐的函数
    Public Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long                   '通过这个函数把文件名转换,得到的是DOS的文件名一样格式,上面的函数才认识
        s = String(LenB(PathName), Chr(0))          ‘pathneme 是你要播放的文件名,例“c:\Example.mid"
        GetShortPathName PathName, S, Len(S)
        On Error Resume Next
        ShortPathName = Left(S, InStr(S, Chr(0)) - 1)    'shortpathname是格式转换后的文件名
        mciSendString "open " & ShortPathName & " alias MyMIDI", vbNullString, 0, 0
        mciSendString "play MyMIDI", vbNullString, 0, 0
        mciSendString "play MyMidi FROM 0", 0&, 0, 0    开
        mciSendString "stop MyMidi FROM 0", 0&, 0, 0    关
    音量不会Public Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
    如果是wav格式是一句
       sndPlaySound “c:\test.wav",&O1      ’&01指音乐与程序同时运行
    &0表示音乐播放完再做其他事详细了吧!