You are on page 1of 4

Sử dụng VB 6.0 Resource Editor http://www.pcworld.com.vn/pcworld/printArticle.asp?atcl_id=5f5e5c58...

Generated by Foxit PDF Creator © Foxit Software


http://www.foxitsoftware.com For evaluation only.

Sử dụng VB 6.0 Resource Editor


Một vấn đề mà người lập trình VB hay gặp phải là sai đường dẫn tập tin dùng trong chương trình. Ví
dụ như khi sử dụng tập tin (file) ảnh với hàm LoadPicture(), nếu vì lý do nào đó mà file này không hiện
diện ở đúng đường dẫn thì sẽ gây báo lỗi hoặc chương trình thực thi không theo đúng thiết kế. Để giải
quyết vấn đề này, VB 6.0 có một công cụ rất hay, không thể thiếu cho các nhà lập trình VB chuyên
nghiệp, đó là RESOURCE EDITOR (RE). Đây là công cụ cho phép tạo cho chương trình một nguồn
dữ liệu gồm các file, được lưu dưới dạng file *.RES khi lập trình và được ghi chung vào file *.EXE khi
biên dịch ra file thực thi.
RE làm việc với 5 loại tài nguyên chính: file ảnh (bitmap), file biểu tượng (icon), file con trỏ của
Windows (cursor), bảng chuỗi ký tự (string table) và các dạng file dữ liệu khác do người dùng định
nghĩa. Các file tài nguyên được RE quản lý theo số chỉ mục (Index – viết tắt là ID), định dạng tài
nguyên (type) và ngôn ngữ (language). ID trong RE có giá trị từ 1 đến 32767 (đối với string table thì từ
1 đến 65535) và được tự động đánh số bắt đầu từ 101. Bạn cũng có thể dùng dạng chuỗi ký tự cho ID
của file tài nguyên (riêng string table chỉ cho phép ID dạng số), lưu ý là ký tự trắng (space) sẽ được tự
động bỏ còn các ký tự đặc biệt (ví dụ: &,^,%,$,@,# ...) thì không được dùng. Nếu nguồn tài nguyên
của bạn có nhiều file thì tốt nhất nên đánh ID dưới dạng tên file tương ứng để dễ nhớ.

VB có 3 hàm hỗ trợ việc truy cập và sử dụng các file trong resource:

LoadResPicture(index,format) as Picture
LoadResString(index) as String
LoadResData(index,format) as ByteArray
• Hàm LoadResPicture(index,format) có giá trị trả về phụ thuộc
vào tham số format, giá trị này có thể tham khảo trong bảng 1.
Tuỳ theo loại file trong resource mà ta truyền tham số tương
ứng cho hàm LoadResPicture để có giá trị trả về phù hợp.
• Hàm LoadResString(index) trả về String tương ứng với index Cửa sổ chính của Resource Editor
trong String Table.
• Hàm LoadResData(index,format) trả về một mảng các giá trị byte (Byte Array). Tham số format
là tên của loại dữ liệu mà người dùng định nghĩa trong RE (mặc định là “Custom” khi thêm loại dữ liệu
khác). Đây là một hàm đặc biệt cho phép người dùng nạp vào bộ nhớ hầu hết các loại dữ liệu với dung
lượng có thể lên tới hàng chục MB hay hơn. Có thể dùng hàm này thay cho hàm LoadResPicture và
LoadResString để nạp các loại dữ liệu đã giới thiệu ở trên (bitmap, icon, cursor), tuy nhiên việc làm
này sẽ khá phức tạp vì hàm LoadResData trả về một chuỗi các byte chứ không trả về một file đã
được định dạng sẵn (như file bitmap). Sau đây là một số ví dụ về sử dụng các hàm truy cập tài nguyên
trong Resource File.
Ví dụ 1: Dùng hàm LoadResPicture và LoadResString để lấy tài nguyên từ trong file *.RES.
Sau khi tạo một project mới có tên là prj_VbResource bạn hãy thao tác theo các bước sau:
Bước 1:
Vào menu Add-Ins/Add-Ins Manager, khi xuất hiện cửa sổ Add-Ins Manager chọn mục VB 6
Resource Editor bên cột Available Add-Ins (nếu không có, bạn hãy tìm “path” của file resedit.dll,
thường là “Program Files\Microsoft Visual Studio\VB98\Wizards”, và “đăng ký” thư viện này bằng cách
vào Start.Run, nhập lệnh regsvr32 <path>\resedit.dll). Chọn mục Loaded/Unloaded nếu bạn muốn
nạp/dừng nạp RE ngay lập tức và Load On Startup nếu bạn muốn VB tự động nạp RE mỗi khi VB khởi
chạy, sau cùng chọn OK.

Bước 2:
Vào menu Tools, chọn Resource Editor hoặc
biểu tượng của RE trên toolbar.
Bước 3:
Đây là bước quan trọng, bạn phải thiết lập hệ
thống các file resource của mình cẩn thận và chính xác. Trên toolbar của RE là một số nút cho phép
nhập các loại file cơ bản vào resource của chương trình: String Table, Cursor, Icon, Bitmap và Custom

1 of 4 12/23/2010 9:44 PM
Sử dụng VB 6.0 Resource Editor http://www.pcworld.com.vn/pcworld/printArticle.asp?atcl_id=5f5e5c58...
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.
Data.

• Chọn biểu tượng String Table sẽ


xuất hiện một bảng gồm 2 cột ID và
Language. Khi nhấn đúp vào nhãn
Language bạn sẽ thấy xuất hiện một
Combo box các ngôn ngữ trên thế giới.
Nội dung của Combo box này được lấy
chủ yếu từ mục Region Setting trong Control Panel của Windows. Để tạo một String table gồm nhiều
ngôn ngữ bạn có thể chọn ngôn ngữ cho một cột rồi tiếp tục nhấn vào biểu tượng , bảng sẽ có thêm
cột mới. Tạo một String Table như minh hoạ sau:
Như vậy có thể thấy với cùng một ID nhưng có đến 2 String tương ứng với hai loại ngôn ngữ. Khi
gọi ID 101 hàm LoadResString sẽ tự động kiểm tra ngôn ngữ hiện tại máy đang dùng rồi đối chiếu với
các loại ngôn ngữ tương ứng trong String Table, nếu không có trong String Table thì hàm sẽ tự động
nạp String ở cột đầu tiên (ở ví dụ này là “Xin Chào !” nếu bạn chọn ngôn ngữ của máy là Vietnamese).
• Thêm một Cursor (ID=103), một Icon (ID=104) và một Bitmap (ID=105) tuỳ ý vào resource.
• Chọn Save, ghi resource vào file .../prj_VbResource.res

• Trong project prj_VbResource tạo một Form mới (Form1) cùng


3 Command Button (Command1, Command2, Command3), một
TextBox (Text1) và một Image (Image1) rồi gõ đoạn code sau vào
phần code của form:
Option Explicit
Private Sub Form_Load()
Form1.Caption = LoadResString(102)
Form1.Icon = LoadResPicture(104, 1)
Form1.MousePointer = vbCustom
Form1.MouseIcon = LoadResPicture(103, 2)
Command1.Caption = “String”
Command2.Caption = “Picture”

Command3.Caption = “Exit”
Text1.Font.Size = 12
Text1.ForeColor = vbBlue
Text1.Text = “”
Image1.BorderStyle = 1
Image1.Stretch = True
End Sub

Private Sub Command1_Click()


Text1.Text = LoadResString(101)
End Sub

Private Sub Command2_Click()


Image1.Picture = LoadResPicture(105, 0)

End Sub

Private Sub Command3_Click()


End
End Sub
‘ ********* End Code *********

Hãy thử chuyển ngôn ngữ hiện tại sang English (dùng Region Setting trong Control Panel của
Windows), bạn sẽ thấy sự khác biệt!
Ví dụ 2: Dùng định dạng file “custom”
Nếu chỉ sử dụng 2 hàm LoadResString và LoadResPicture thì bạn chỉ có thể sử dụng resource từ
những file có định dạng *.ico, *.cur, *.bmp, còn với những file có định dạng khác như *.gif, *.wav, *.avi
, *.mdb v.v... thì hai hàm này thì chưa đủ. Hàm LoadResData trả về một định dạng hoàn toàn không
xác định đó là một mảng các byte (Byte Array). Kết hợp mảng dữ liệu này với một số hàm WinAPI và

2 of 4 12/23/2010 9:44 PM
Sử dụng VB 6.0 Resource Editor http://www.pcworld.com.vn/pcworld/printArticle.asp?atcl_id=5f5e5c58...
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.
các lệnh thao tác file của VB, bạn hoàn toàn có thể có được một resource theo ý muốn. Ví dụ sau sẽ
hướng dẫn bạn tạo một resource chứa file *.wav và *.avi
Mở một Project mới, dùng VB Resource Editor thêm vào resource một file *.wav với ID=101 và
Type=”Sound” cùng một file *.avi với ID=102 và Type=”Video”.
Tạo một Form mới (Form1) với 4 Command Button. Chọn menu Project/Components, chọn
Microsoft Windows Common Controls-2 6.0, sau đó tạo một control Animation mới. Tạo một Module
mới có nội dung sau:
Option Explicit
‘ ********* Module Code **********

Private Declare Function sndPlaySound Lib “WINMM.DLL” Alias_


“sndPlaySoundA” (lpszSoundName As Any, ByVal uFlags As Long)
As Long
Const SND_ASYNC = &H1
Const SND_NODEFAULT = &H2
Const SND_MEMORY = &H4
Dim SoundBuffer() As Byte

Public Sub BeginPlaySound(ByVal ResourceID As Integer)


SoundBuffer = LoadResData(ResourceId, “Sound”)
sndPlaySound SoundBuffer(0), SND_ASYNC Or SND_NODEFAULT Or SND_MEMORY
End Sub

Public Sub EndPlaySound()


sndPlaySound ByVal vbNullString, 0&
End Sub

Public Function CreateFileRs(ByVal FilePath As String, ByVal ResID As String, ByVal ResType As
String) As Boolean
Dim hFile As Long
Dim FileArr() As Byte
FileArr = LoadResData(ResID, ResType)
On Error Resume Next
If Len(FileArr(1)) > 0 Then
hFile = FreeFile()
Open FilePath For Binary Access Write As #hFile
Put #hFile, 1, FileArr
Close #hFile
CreateFileRs = True
End If
End Function
‘ ***** End Module Code *****

Sau đó tiếp tục nhập đoạn code sau vào phần form code:
Option Explicit
‘ ********* Form Code *******
Private Sub Command1_Click()
Animation1.Play
End Sub

Private Sub Command2_Click()


Animation1.Stop
End Sub

Private Sub Command3_Click()


BeginPlaySound 101
End Sub

Private Sub Command4_Click()


End

3 of 4 12/23/2010 9:44 PM
Sử dụng VB 6.0 Resource Editor http://www.pcworld.com.vn/pcworld/printArticle.asp?atcl_id=5f5e5c58...
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.
End Sub

Private Sub Form_Load()


Command1.Caption = “Play”
Command2.Caption = “Stop”
Command3.Caption = “Play Sound”
Command4.Caption = “Exit”
If Dir(“c:\vbResAvi.avi”) = “” Then
CreateFileRs “c:\vbResAvi.avi”, 102, “Video”
End If
Animation1.Open “c:\vbResAvi.avi”
End Sub

Private Sub Form_Unload(Cancel As Integer)


EndPlaySound
End Sub

Hàm CreateFileRs() nhận 3 tham số sau:


- FilePath: tham số xác định đường dẫn trên đĩa cứng nơi sẽ sao chép dữ liệu trong Reource ra
một file mới. Đường dẫn này phải gồm cả tên và phần mở rộng của file. Ví dụ: “C:\temp\vbRes.AVI”.
- ResID và ResType là các tham số xác định ID và định dạng của file cần copy trong Resource.
Có thể ví RE như một chiếc “máy ảnh” chuyên sao chụp file thông tin lên “phim”, còn hàm
CreateFileRs “rửa” những đoạn “phim” đó ra giấy. Bạn cũng có thể sử dụng hàm này thay cho hàm
LoadResPicture để sao chép các tài nguyên bitmap trong Resource ra các file ảnh thông thường rồi
dùng hàm LoadPicture để sử dụng các file ảnh đó. Kết hợp RE với hàm CreateFileRs, bạn hoàn toàn
có thể đọc vào và ghi ra từ resource của chương trình tất cả các loại file dữ liệu, việc sử dụng các file
này như thế nào là tuỳ ứng dụng. Hy vọng với công cụ Resource Editor, bạn không còn phải băn khoăn
trong việc lựa chọn và xây dựng hệ thống tài nguyên cho chương trình để chạy trên bất kỳ máy tính
nào. Chúc bạn thành công!

Trần Nam Khanh - FPT APTECH


trannamkhanh@yahoo.com

[In trang] [Đóng trang]

© Tạp chí Thế Giới Vi Tính - PC World VN. CQ chủ quản: Sở Khoa Học và Công Nghệ TP.HCM
Giấy phép số 196/GP-BVHTT do Bộ Văn Hóa Thông Tin cấp ngày 27-06-2003
Tòa soạn: 126 Nguy ễn Thị Minh Khai, Q.3 TP.HCM - ĐT: 84.8.39304324 - FAX: 84.8.39304338
Bản quyền của Thế Giới Vi Tính - PC World VN

4 of 4 12/23/2010 9:44 PM

You might also like