⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 play.frm

📁 OpenPlayer代码
💻 FRM
字号:
VERSION 5.00
Object = "{D27CDB6B-AE6D-11CF-96B8-444553540000}#1.0#0"; "SWFLASH.OCX"
Begin VB.Form Play 
   Appearance      =   0  'Flat
   BackColor       =   &H80000000&
   BorderStyle     =   0  'None
   Caption         =   "SuperPlayer播放区"
   ClientHeight    =   1785
   ClientLeft      =   4500
   ClientTop       =   2040
   ClientWidth     =   2580
   Icon            =   "Play.frx":0000
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   MinButton       =   0   'False
   ScaleHeight     =   1785
   ScaleWidth      =   2580
   ShowInTaskbar   =   0   'False
   Begin ShockwaveFlashObjectsCtl.ShockwaveFlash ShockwaveFlash1 
      Height          =   375
      Left            =   360
      TabIndex        =   0
      Top             =   150
      Width           =   480
      _cx             =   4195151
      _cy             =   4194965
      Movie           =   ""
      Src             =   ""
      WMode           =   "Window"
      Play            =   -1  'True
      Loop            =   -1  'True
      Quality         =   "High"
      SAlign          =   ""
      Menu            =   -1  'True
      Base            =   ""
      Scale           =   "ShowAll"
      DeviceFont      =   0   'False
      EmbedMovie      =   0   'False
      BGColor         =   ""
      SWRemote        =   ""
   End
   Begin VB.Timer ResizeTimer 
      Interval        =   50
      Left            =   1380
      Top             =   780
   End
   Begin VB.Shape FlashBorder 
      BorderColor     =   &H00800000&
      Height          =   555
      Index           =   0
      Left            =   225
      Top             =   90
      Visible         =   0   'False
      Width           =   855
   End
   Begin VB.Shape FlashBorder 
      BorderColor     =   &H00FFFFFF&
      Height          =   675
      Index           =   1
      Left            =   60
      Top             =   30
      Visible         =   0   'False
      Width           =   1035
   End
   Begin VB.Shape FlashBorder 
      BorderColor     =   &H00800000&
      Height          =   765
      Index           =   2
      Left            =   0
      Top             =   0
      Visible         =   0   'False
      Width           =   1305
   End
End
Attribute VB_Name = "Play"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit

'取得窗口位置的函数
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long

Const WM_SYSCOMMAND = &H112
Const SC_MOVE = &HF012
'窗口位置变量
Private Type RECT
   Left As Long
   Top As Long
   Right As Long
   Bottom As Long
End Type

Dim Mouse As POINTAPI
Dim MyMouse As POINTAPI
Dim MyRect As RECT



Dim Action As String                             '所要执行的动作变量,是移动还是改变大小及从哪个方向改变大小

Sub OpenFlash(fn As String)
Dim oFSO As New FileSystemObject
Dim oF As file
Dim tFN As FLASHNOTE
Dim i As Long
Dim LsIndex As Long

    '请参考getFlashHeader(fn) 函数
    FH = getFlashHeader(fn)
    If FH.intIsFlashMovie = -1 Then
        MsgBox "找不到文件   " & vbCrLf & fn, vbOKOnly + vbCritical, "小鱼儿工作室"
        If ShockwaveFlash1.Movie = "" Then
            Me.Visible = False
        End If
        Exit Sub
    End If
   
    If FH.intIsFlashMovie = 0 Then
        MsgBox "文件不是Flash Movie 格式!      ", vbOKOnly + vbCritical, "小鱼儿工作室"
        If ShockwaveFlash1.Movie = "" Then
            Me.Visible = False
        End If
        Exit Sub
    End If
   
    If FH.intIsFlashMovie = 2 Then
        MsgBox "未知错误!  ", vbOKOnly + vbCritical, "小鱼儿工作室"
        If ShockwaveFlash1.Movie = "" Then
            Me.Visible = False
        End If
        Exit Sub
    End If
    
    '有一些动画隐藏了鼠标,ShowMouse.spf 是一个显示鼠标的文件,这样做是为了显示鼠标.
    ShockwaveFlash1.Movie = App.Path & IIf(Len(App.Path) >= 4, "\ShowMouse.spf", "ShowMouse.spf")
    
    ShockwaveFlash1.Play
    ControlForm.SpeedTimer.Enabled = False
   
    '当窗口最小化时,不能调整大小
    Me.WindowState = 0
   
    SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, 3   '设置总在最前面,好像有一个API可以实现使一个窗口置于所有窗口之前,但不是"总在最前面",我还没有弄懂
    SetWindowPos Me.hwnd, -2, 0, 0, 0, 0, 3   '取消
  
  
   
    With ShockwaveFlash1
        .Visible = True
        .BackgroundColor = RGB(FH.bColorB, FH.bColorG, FH.bColorR)      '设置背景色
        .Movie = fn                                                     '动画的路径
        .Play                                                           '播放
    End With
   
    With Me
        .Visible = True
        .WindowState = 0
        .Height = FH.lMHeight * 15 + 120                                '设置窗口大小
        .Width = FH.lMWidth * 15 + 120
        .Top = (Screen.Height - .Height) / 3                            '位置
        If .Width < ControlForm.Left Then
           Me.Left = (ControlForm.Left - Me.Width) / 2
        Else
           Me.Left = 15
        End If
    End With
   

   '查找重复的项
   LsIndex = SendMessage(ControlForm.ComboAddr.hwnd, CB_FINDSTRING, -1, ByVal fn)
   If LsIndex = -1 Then
        ControlForm.ComboAddr.AddItem fn, 0
   End If
   ControlForm.ComboAddr.Text = fn
   
   LsIndex = SendMessage(ControlForm.List(1).hwnd, LB_FINDSTRING, -1, ByVal fn)
   If LsIndex = -1 Then
        ControlForm.List(0).AddItem ("[" & ControlForm.List(0).ListCount + 1 & "]" & getBaseName(fn))
        ControlForm.List(1).AddItem fn
   End If
  
    '菜单
    ControlForm.speed.Caption = "速度:" & FH.intMRate & "帧/秒"
    ControlForm.total.Caption = "共:" & FH.intMTotalFrames & "帧"
      
    '作者和作品名
    tFN = getNote(fn)
    ControlForm.MovieLabel.Caption = tFN.strMovieName
    ControlForm.MovieLabel.ToolTipText = tFN.strMovieName
    ControlForm.AuthorLabel.Caption = "作者:" & tFN.strAuthor
    ControlForm.AuthorLabel.ToolTipText = "作者:" & tFN.strAuthor
       
    '设置播放窗口的标题
    Me.Caption = "OpenPlayer播放区—" & tFN.strMovieName & "(" & fn & ")"
       
    '全局的总帧数,Swflash.ocx 中的ShockwaveFlash1.TotalFrames 在一些版本中不能用
    TotalFrames = FH.intMTotalFrames
    
    Th = Hour(Time())
    Tm = Minute(Time())
    Ts = Second(Time())
    
    '属性
    ControlForm.PropertiyLabel(0).Caption = "文件名 :" & Right(fn, Len(fn) - InStrRev(fn, "\"))
    ControlForm.PropertiyLabel(1).Caption = "大    小:" & FormatNumber(FH.lMSize, 0) & "字节"
    ControlForm.PropertiyLabel(2).Caption = "版    本:Flash " & FH.bMVersion
    ControlForm.PropertiyLabel(3).Caption = "完成日期:" & FormatDateTime(FileDateTime(fn), vbLongDate) & FormatDateTime(FileDateTime(fn), vbLongTime)
    ControlForm.PropertiyLabel(4).Caption = "帧    数:" & FormatNumber(FH.intMTotalFrames, 0) & "帧"
    ControlForm.PropertiyLabel(5).Caption = "速    度:" & FH.intMRate & "帧/秒"
    ControlForm.PropertiyLabel(6).Caption = "高 × 宽:" & FH.lMHeight & " × " & FH.lMWidth & " 像素"
    ControlForm.PropertiyLabel(7).Caption = "估计时间:" & FormatNumber(FH.intMTotalFrames / FH.intMRate, 2) & "秒"
      
   
    
    Set oFSO = Nothing
   
End Sub

Sub FixWindows()
    '调整控件在窗口中的大小
    ShockwaveFlash1.Height = Me.Height - 120
    ShockwaveFlash1.Width = Me.Width - 120
End Sub

Sub DrawBorder()
'画边框
    FlashBorder(0).Top = 15
    FlashBorder(0).Left = 15
    FlashBorder(0).Height = Me.Height - 30
    FlashBorder(0).Width = Me.Width - 30
    FlashBorder(0).Visible = True
    FlashBorder(1).Top = 30
    FlashBorder(1).Left = 30
    FlashBorder(1).Height = Me.Height - 60
    FlashBorder(1).Width = Me.Width - 60
    FlashBorder(1).Visible = True
    FlashBorder(2).Top = 45
    FlashBorder(2).Left = 45
    FlashBorder(2).Height = Me.Height - 90
    FlashBorder(2).Width = Me.Width - 90
    FlashBorder(2).Visible = True
End Sub


Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
   '与Form_MouseMove结合,通过鼠标调整窗口的大小
   '按下鼠标左键
    If Button = vbLeftButton Then
        '为当前的应用程序释放鼠标捕获
        ReleaseCapture
        Select Case Action
               Case "Left"
                    SendMessage Me.hwnd, WM_SYSCOMMAND, &HF001, 0
               Case "Right"
                    SendMessage Me.hwnd, WM_SYSCOMMAND, &HF002, 0
               Case "Up"
                    SendMessage Me.hwnd, WM_SYSCOMMAND, &HF003, 0
               Case "LeftUp"
                    SendMessage Me.hwnd, WM_SYSCOMMAND, &HF004, 0
               Case "RightUp"
                    SendMessage Me.hwnd, WM_SYSCOMMAND, &HF005, 0
               Case "Down"
                    SendMessage Me.hwnd, WM_SYSCOMMAND, &HF006, 0
               Case "LeftDown"
                    SendMessage Me.hwnd, WM_SYSCOMMAND, &HF007, 0
               Case "RightDown"
                    SendMessage Me.hwnd, WM_SYSCOMMAND, &HF008, 0
               Case "Move"
                    ReleaseCapture
                    SendMessage hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
        End Select
        
        If Me.Width < 200 Then Me.Width = 200
        If Me.Height < 200 Then Me.Height = 200
        ShockwaveFlash1.Width = Me.Width - 120
        ShockwaveFlash1.Height = Me.Height - 120
        Call DrawBorder
    End If


End Sub

Private Sub Form_Resize()
    FixWindows                              '调整窗口的大小
    DrawBorder                              '画边框
End Sub



Private Sub ResizeTimer_Timer()

Dim MyPoint As POINTAPI

    ' MyRect返回当前窗口位置
    Call GetWindowRect(Me.hwnd, MyRect)
    
    ' MyPoint返回当前鼠标位置
    Call GetCursorPos(MyPoint)
    
    If WindowFromPoint(MyPoint.X, MyPoint.Y) = Me.hwnd Then
        Select Case True
              '鼠标位于窗口左上方
             Case MyPoint.X < MyRect.Left + 5 And MyPoint.Y < MyRect.Top + 5
                  Screen.MousePointer = vbSizeNWSE
                  Action = "LeftUp"
             '鼠标位于窗口右下方
             Case MyPoint.X > MyRect.Right - 5 And MyPoint.Y > MyRect.Bottom - 5
                  Screen.MousePointer = vbSizeNWSE
                  Action = "RightDown"
             '鼠标位于窗口右上方
             Case MyPoint.X > MyRect.Right - 5 And MyPoint.Y < MyRect.Top + 5
             '45度双向鼠标指针
                  Screen.MousePointer = vbSizeNESW
                  Action = "RightUp"
             '鼠标位于窗口左下方
             Case MyPoint.X < MyRect.Left + 5 And MyPoint.Y > MyRect.Bottom - 5
                  Screen.MousePointer = vbSizeNESW
                  Action = "LeftDown"
             '鼠标位于窗口左边
             Case MyPoint.X < MyRect.Left + 5
                  Screen.MousePointer = vbSizeWE
                  Action = "Left"
             '鼠标位于窗口右边
             Case MyPoint.X > MyRect.Right - 5
                  Screen.MousePointer = vbSizeWE
                  Action = "Right"
             '鼠标位于窗口上方
             Case MyPoint.Y < MyRect.Top + 5
             '垂直双向鼠标指针
                  Screen.MousePointer = vbSizeNS
                  Action = "Up"
             '鼠标位于窗口下方
             Case MyPoint.Y > MyRect.Bottom - 5
                  Screen.MousePointer = vbSizeNS
                  Action = "Down"
             '鼠标位于窗口其他位置
             Case Else
             '默认鼠标指针
                  Action = "Move"
                  Screen.MousePointer = 0
        End Select
    Else
        Action = "Move"
        Screen.MousePointer = 0
    End If

End Sub


Private Sub Form_Load()
    Dim ret As Long
    
    ShockwaveFlash1.Top = 60
    ShockwaveFlash1.Left = 60
    ret = EnumChildWindows(Me.hwnd, AddressOf EnumChildProc, ByVal 0&)

    Call DrawBorder
    Call FixWindows
End Sub

Private Sub ShockwaveFlash1_FSCommand(ByVal command As String, ByVal args As String)
Dim isExec As Integer
Dim oFSO As New FileSystemObject
    Select Case UCase(command)
   
       '======================================
       '全屏显示
       'FSCommand 用法:
       'fscommand ("fullscreen","true/false")
       '======================================
         Case UCase("FullScreen")  '全屏显示
             If UCase(args) = UCase("False") Or args = "0" Then
                  isFullScreen = True
                  Call ControlForm.doFullScreen
             Else
                  isFullScreen = False
                  Call ControlForm.doFullScreen
             End If
       '======================================
       '退出当前电影
       'FSCommand 用法:
       'fscommand ("Quit")
       '======================================
        Case UCase("quit")
            ShockwaveFlash1.Movie = ""
            Unload Me
         '=====================================
         '执行程序:
         'FSCommand 用法:
         'fscommand ("exec",FileName)
         '
         '=====================================
        Case UCase("exec")
        On Error Resume Next
             If MsgBox("电影要求执行程序:" & vbCrLf & vbCrLf & args & vbCrLf & vbCrLf & "是否执行?", vbYesNo + vbInformation, "FSCommand") = vbYes Then
                If oFSO.FileExists(args) = False Then
                   MsgBox vbCrLf & "          找不到程序:     " & vbCrLf & "        " & args, vbOKOnly + vbCritical, "找不到程序..."
                Else
                   Shell args, vbNormalFocus
                End If
                End If
         '=====================================
         '总在最前面
         'FSCommand 用法:
         'fscommand ("onTop","true/false")
         '=====================================
        Case UCase("onTop")
            If UCase(args) = UCase("False") Or args = "0" Then
                SetWindowPos Play.hwnd, -2, 0, 0, 0, 0, 3   '取消
                ControlForm.onTop.Checked = False
             Else
                SetWindowPos Play.hwnd, -1, 0, 0, 0, 0, 3   '设置
                ControlForm.onTop.Checked = True
             End If
        
  End Select
 Set oFSO = Nothing
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -