Tác giả: tuyen_dt18
Cấp độ bài viết: Chưa đánh giá
Tóm tắt: Bài viết nhằm hướng dẫn các bạn sử dụng đối tượng Shockwave Flash để chơi một file Media hoặc một Media Stream.
Yêu cầu : Để có đối tượng Shockwave Flash các bạn cần phải cài đặt Flash Player dành cho Internet Explorer trên máy tính của mình.
Để có thể chơi tệp tin Media, các bạn phải có một Player, các bạn có thể tải ở địa chỉ http://player.longtailvideo.com/player.swf, hoặc tại đây
Các bạn có thể kiểm tra Flash đã được cài đặt hay chưa bằng cách vào thư mục "C:\Windows\System32\Macromed\Flash" trong máy tính của mình.
Bước 1 : Các bạn khởi chạy VB6 và chọn tạo mới một Standard EXE Project. Bước 2 : Các bạn vào Menu : Project --> Components để tham chiếu tới đối tượng ShockwaveFlash Bước 3 : Khi hộp thoại tham chiếu Components bật lên, chọn vào mục Shockwave Flash, nhấn OK Sau khi đã tham chiếu thành công, trên thanh ToolBox sẽ xuất hiện biểu tượng của Flash như dưới đây: Bước 4 : Viết chương trình
Cách sử dụng đối tượng Shockwave Flash : Để chơi một tệp tin Media hoặc Media Stream, ta cần cung cấp cho đối tượng Shockwave Flash biết các tham số như : Đường dẫn tệp tin cần chơi, hoặc địa chỉ của Media Stream cùng một số tham số phụ khác. Các tham số này được yêu cầu bởi đối tượng Shockwave Flash hoặc do đối tượng Player (tệp tin có đuôi .swf) do người viết Flash tạo ra.
Tham số riêng của Player thì tùy theo người tạo ra trình Player đó, còn tham số của đối tượng Shockwave Flash thì có một số thuộc tính như sau : Movie, FlashVars, ....
Một số thuộc tính phổ biến :
autoStart : gán="true" để tự động chơi khi đã chỉ định nguồn Media để chơi và="false" để ngược lại.
allowFullScreen : gán="true" sẽ hiệu lực khả năng phóng Toàn màn hình nếu trình Player có sẵn tính năng.
file : Chỉ định tệp tin Media cần chơi. Chú ý : thuộc tính file mà ta cung cấp thường có ký tự "\" trong đó, mà đối tượng Player lại không hiểu dạng đường dẫn của VB6, nên ta sẽ dùng cách là Sao chép tệp tin Player vào cùng thư mục của tệp tin Media, hoặc Sao chép ngược lại rồi chỉ cần chỉ định Tên của tệp tin chứ không cần chỉ định đường dẫn đầy đủ.
streamer : Chỉ định địa chỉ của Máy chủ chứa Media Stream.
Trong bài viết này : Ở bài viết này chúng ta sẽ sử dụng thuộc tính file và thuộc tính streamer là chính. Để gán các giá trị này ta sẽ gán vào thuộc tính "movie" của đối tượng Shockwave Flash và các thuộc tính phân cách nhau bằng dấu &(chú ý trong các thuộc tính không nên có dấu & để tránh nhầm lẫn). Ví dụ : ShockwaveFlash1.movie="file=Tep_tin_Media&autostart=true"
Bắt đầu viết chương trình :
Thiết kế Form như dưới đây : Xin nói qua về việc thêm đối tượng Shockwave Flash vào Form của chương trình. Tôi không hiểu tại sao, nhưng nếu thêm đối tượng Shockwave Flash vào từ lúc thiết kế thì không thể Save Project lại được, và sau này khi mở lại Project cũng hay xảy ra lỗi. Tuy nhiên, các bạn có thể thêm được bằng cách tạo cho Form một Menu bất kỳ. Điều này tôi thực sự chưa hiểu tại sao, nhưng tôi đã làm nó.
Để tránh lỗi này, tôi chọn cách thêm đối tượng lúc Runtime.
Sau khi thiết kế, các bạn Paste Mã nguồn dưới đây vào Form. Sau đó chạy chương trình và nhập vào Text1 đường dẫn tới tệp tin Player có đuôi .swf, Text2 là đường dẫn tới tệp tin Media như tôi đã làm trên máy của mình:
- Option Explicit
- Private Declare Function CopyFileW Lib "kernel32" (ByVal lpExistingFileName As Long, ByVal lpNewFileName As Long, ByVal bFailIfExists As Long) As Long
- Private Declare Function DeleteFileW Lib "kernel32" (ByVal lpFileName As Long) As Long
- Private Declare Function GetTempFileNameW Lib "kernel32" (ByVal lpszPath As Long, ByVal lpPrefixString As Long, ByVal wUnique As Long, ByVal lpTempFileName As Long) As Long
- '
- Private ShockwaveFlash1 As Object
- Private bShockwaveFlash1 As Boolean
- '
- Private Sub InitFlashObject(ByVal bInit As Boolean)
- On Error GoTo ErrorHandler
- If (bInit) Then
- If (ShockwaveFlash1 Is Nothing) Then
- Set ShockwaveFlash1 = Me.Controls.Add("ShockwaveFlash.ShockwaveFlash", "ShockwaveFlash1")
- End If
- With ShockwaveFlash1
- .AllowFullScreen = "true"
- .Move 0, Text2.Top + Text2.Height + 100, Me.ScaleWidth, 3800
- .Visible = True
- End With
- Else
- Me.Controls.Remove "ShockwaveFlash1"
- Set ShockwaveFlash1 = Nothing
- End If
- bShockwaveFlash1 = Not (ShockwaveFlash1 Is Nothing)
- Exit Sub
- ErrorHandler
- Err.Clear
- End Sub
- '
- Private Function DeleteFile(ByVal szFileName As String) As Boolean
- DeleteFile = DeleteFileW(StrPtr(szFileName))
- End Function
- '
- Private Function CopyFile(ByVal szSource As String, ByVal szDest As String, Optional ByVal bOverwrite As Boolean = False) As Boolean
- CopyFile = CopyFileW(StrPtr(szSource), StrPtr(szDest), Not bOverwrite)
- End Function
- '
- Private Function CreateUniqueTempFile(Optional ByVal szPath As String, Optional ByVal szPrefix As String) As String
- Dim lpszTempFile As String
- Dim lReturn As Long
- '
- lpszTempFile = String$(255, vbNullChar)
- lReturn = GetTempFileNameW(StrPtr(szPath), StrPtr(szPrefix), ByVal 0, StrPtr(lpszTempFile))
- CreateUniqueTempFile = lpszTempFile
- lReturn = InStr(1, lpszTempFile, vbNullChar)
- If (lReturn > 0) Then CreateUniqueTempFile = Left$(lpszTempFile, lReturn - 1)
- End Function
- '
- Private Function GetFilePath(ByVal szFullPathName As String, Optional ByRef lpszFileName) As String
- Dim nPos As Long
- If (Not IsMissing(lpszFileName)) Then
- lpszFileName = szFullPathName
- End If
- nPos = InStrRev(szFullPathName, "")
- If (nPos > 0) Then
- GetFilePath = Left$(szFullPathName, nPos)
- lpszFileName = Mid(szFullPathName, nPos + 1)
- End If
- End Function
- '
- Private Sub GetFilePart(ByVal szFullPathName As String, Optional lpPath, Optional lpFile)
- Dim nPos As Long
- Dim szPath As String
- Dim szFile As String
- nPos = InStrRev(szFullPathName, "")
- If (nPos > 0) Then
- szPath = Left$(szFullPathName, nPos)
- szFile = Mid(szFullPathName, nPos + 1)
- Else
- szPath = szFile
- szFile = ""
- End If
- If (Not IsMissing(lpPath)) Then lpPath = szPath
- If (Not IsMissing(lpFile)) Then lpFile = szFile
- End Sub
- '
- Private Function PlayerMediaFile(ByVal szMedia As String, ByVal szPlayer As String)
- Dim szFileName As String
- Dim szFilePath As String
- Dim szPlayerPathName As String
- Call GetFilePart(szMedia, szFilePath, szFileName) 'Lay ve Ten thu muc va Ten tep tin Media
- szPlayerPathName = CreateUniqueTempFile(szFilePath) 'Tao tep tin ta.m trong cung thu muc voi tep tin Media
- CopyFile szPlayer, szPlayerPathName, True 'Sao chep tep tin Player vao dia chi tep tin ta.m (ghi de`).
- With ShockwaveFlash1
- .Movie = ""
- .Stop
- .Movie = szPlayerPathName & "?autostart=true&allowFullScreen=true&volume=100&stretching=fill&file=" & szFileName
- DeleteFile szPlayerPathName 'Xoa tep tin player sau khi ShockwaveFlash da ta?i len.
- .Play
- End With
- End Function
- Private Sub Command1_Click()
- PlayerMediaFile Text2.Text, Text1.Text
- End Sub
- Private Sub Form_Load()
- InitFlashObject True
- End Sub
- Private Sub Form_Unload(Cancel As Integer)
- InitFlashObject False
- End Sub
Nhán vào nút Play và kết quả là : Đây là Project hoàn chính :