Hiển thị mã Unicode trong Access 2000
Trước khi giải quyết vấn đề chúng ta cần làm rõ một
số điểm. Thường Office 2000 dùng ngôn ngữ VBA
version 6.0 để viết code. Trên Win9x hay WinMe,
hai trở ngại khi dùng Unicode trong lập trình hin thị
chuỗi Unicode lên các phần t giao diện, đó là:
1. Môi trường soạn thảo code VBA không cho phép
bạn nhập đúng các chuỗi Unicode.
2. Các đối tượng giao diện chuẩn của VBA, version
6.0 không hin thị được chuỗi Unicode.
Để khắc phục 2 trở ngại trên, bạn nên:
-Nhập chuỗi Unicode trong cửa sổ thiết kế giao diện
và cửa sổ soạn code theo định dạng UTF-8 vì đnh
dạng này tương thích với mã ASCII truyn thống. Dĩ
nhiên, trước
khi sử dụng thật chuỗi UTF-8, bạn cần chuyển nó về
định dạng USC-2 thông qua việc gọi hàm API
Windows có tên là MultibyteToWideChar().
-Thay vì dùng các đối tượng giao diện có sẵn của môi
trường thiết kế VBA, bạn phải dùng các đối tượng
Form2 tương ứng. "Microsoft Form 2.0 Object
Library" là một tviện các đối tượng giao diện mà
Microsoft mới viết sau này để hỗ trợ đúng mã
Unicode.
Chúng tôi có viết một form đơn giản, có 1 textbox để
nhập giá trị số, 1 textbox để hiển thị chuỗi chữ tương
ứng (ở dạng đơn giản nhất, cốt yếu để minh họa việc
xử lý chuỗi Unicode), 1 button cho phép chuyển số
thành chuỗi. Các đối tượng được dùng đều có trong
thư viện "Form 2.0". Qui trình xây dựng ứng dụng
này gm các bước cụ thể sau:
1. Vì phát biểu Declare của VB không khai báo đúng
các hàm API có tham số là chuỗi Unicode n trước
tiên bạn phải xây dựng một thư viện kiểu (type
library) chứa hàm MultiByteToWideChar() để dùng
trong ng dụng. Hãy dùng mt trình son thảo văn
bản soạn nội dung đặc tả thư viện TypeLib chứa hàm
MultiByteToWideChar() bằng ngôn ngữ ODL như
sau (cất nội dung lên file uniutil.odl):
[
uuid(13C9AF40-856A-101B-B9C2-
04021C007002),
helpstring("WIDE Windows API Type Library")
]
library WideWin32API
{
[
helpstring("KERNEL API Calls"),
dllname("KERNEL32")
]
module KernelAPI
{
[
helpstring("Convert a UTF8 string to a UCS-2
string."),
entry("MultiByteToWideChar")
]
long _stdcall MultiByteToWideChar
(
[in] long CodePage,
[in] long dwFlags,
[in] BSTR lpMultiByteStr,
[in] long cchMultiByte,
[in] BSTR lpWideCharStr,
[in] long cchWideChar
);
};
};
2. Dịch file ODL trên thành file thư viện kiểu
uniutil.tlb bằng tiện ích mktyplib.exe. Để có tiện ích
này, bạn có thể cài b Visual Studio 6.0, nếu cài
chế độ Typical, bộ VS sẽ được cài vào thư mục
"c:\Program Files\Microsoft Visual Studio". Nếu vậy,
để dịch file uniutil.odl trên, bạn hãy tạo một cửa sổ
DOS Prompt, dùng lnh cd để chuyển về t mục
chứa file uniutil.odl, rồi nhập tuần tự 2 lệnh sau để
dịch nó:
c:\progra~1\micros~3\vc98\bin\vcvars32.bat
mktyplib /I c:\progra~1\micros~3\vc98\include
/win32 /tlb uniutil.tlb uniutil.odl
Giả sử tên ngn của thư mục "Program Files" là
progra~1, của thư mục "Microsoft Visual Studio" là
micros~3.
3. Chy VB, tạo 1 project "Standard Exe" để quản lý
ứng dụng.
4. Ấn chuột phải vào chtrống trong cửa sổ
ToolBox, chn mc "Components..." để hiển thị cửa
sổ "Components", ấn button Controls, duyệt đến mục
"Microsoft Forms 2.0 Object Library" và chọn nó đ