Thông tin tài liệu:
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, có hai trở ngại khi dùng Unicode trong lập trình hiển thị chuỗi Unicode lên các phần tử giao diện, đó là:
Nội dung trích xuất từ tài liệu:
Hiển thị mã Unicode trong Access 2000Hiển thị mã Unicode trong Access 2000Trước khi giải quyết vấn đề chúng ta cần làm rõ mộtsố điểm. Thường Office 2000 dùng ngôn ngữ VBAversion 6.0 để viết code. Trên Win9x hay WinMe, cóhai trở ngại khi dùng Unicode trong lập trình hiển 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épbạn nhập đúng các chuỗi Unicode.2. Các đối tượng giao diện chuẩn của VBA, version6.0 không hiển 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ệnvà cửa sổ soạn code theo định dạng UTF-8 vì địnhdạng này tương thích với mã ASCII truyền thống. Dĩnhiên, trướckhi 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 APIWindows có tên là MultibyteToWideChar().-Thay vì dùng các đối tượng giao diện có sẵn của môitrường thiết kế VBA, bạn phải dùng các đối tượngForm2 tương ứng. Microsoft Form 2.0 ObjectLibrary là một thư việ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ệcxử 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ó trongthư viện Form 2.0. Qui trình xây dựng ứng dụngnày gồm các bước cụ thể sau:1. Vì phát biểu Declare của VB không khai báo đúngcác hàm API có tham số là chuỗi Unicode nên trướctiên bạn phải xây dựng một thư viện kiểu (typelibrary) chứa hàm MultiByteToWideChar() để dùngtrong ứng dụng. Hãy dùng một trình soạn thảo vănbản soạn nội dung đặc tả thư viện TypeLib chứa hàmMultiByteToWideChar() 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-2string.), 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ểuuniutil.tlb bằng tiện ích mktyplib.exe. Để có tiện íchnà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ụcc:Program FilesMicrosoft 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 lệnh cd để chuyển về thư mụcchứa file uniutil.odl, rồi nhập tuần tự 2 lệnh sau đểdịch nó:c:progra~1micros~3vc98invcvars32.batmktyplib /I c:progra~1micros~3vc98include/win32 /tlb uniutil.tlb uniutil.odlGiả sử tên ngắn của thư mục Program Files làprogra~1, của thư mục Microsoft Visual Studio làmicros~3.3. Chạy VB, tạo 1 project Standard Exe để quản lýứng dụng.4. Ấn chuột phải vào chỗ trống trong cửa sổToolBox, chọn mục Components... để hiển thị cửasổ Components, ấn button Controls, duyệt đến mụcMicrosoft Forms 2.0 Object Library và chọn nó đểthêm các phần tử giao diện trong thư viện này vàoToolbox của Project VB.5. Chọn menu Project.References... để hiển thị cửa sổReferences, ấn button Browse rồi duyệt hệ thống fileđể chọn file uniutil.tlb vừa tạo ở bước 1 để thêm nóvào Project. 6. Vẽ lần lượt từng phần tử:1 TextBox có thuộc tính Name=txtSo; 1 Label kếthợp có thuộc tính Caption=Hãy nhập số :; 1CommandButton có thuộc tính Caption=Bắt đầuchuyển và thuộc tính Name=cmdChuyenSo; 1TextBox nữa có thuộc tính Name=txtChuoi; 1 Labelkết hợp có thuộc tính Caption=Chuỗi tương đương:. Lưu ý rằng bạn phải dùng trình hỗ trợ tiếng Việtcó khả năng tạo mã UTF-8 (VietKey 2000, GVSBK2.2,...) và chọn mã này trong việc nhập các chuỗitiếng Việt trong lúc thiết kế form và viết code. Cũnglưu ý rằng các phần tử cần vẽ là các phần tử của thưviện Microsoft Forms 2.0 Object Library, chứkhông phải là các phần tử VB chuẩn (thường chúngnằm phía dưới cùng trong cửa sổ ToolBox). Sau khithiết kế xong, form sẽ có dạng sau (chú ý các chuỗiUTF-8 rất khó đọc):7. Tạo thủ tục xử lý sự kiện Click chuột cho buttoncmdChuyenSo rồi vào cửa sổ viết code của form đểnhập đoạn chương trình sau:Option Explicitdãy chứa chuỗi UTF8 mi êu tả các ký sốmã ký số 0 đến 9 là 48 đến 57Dim dayUTF8(48 To 57) As Stringdãy chứa chuỗi UCS2 miêu tả các ký sốDim dayUCS2(48 To 57) As String Thủ tục khởi động FormPrivate Sub Form_Load()Dim s As StringDim x() As ByteDim ret As IntegerDim i As Integer dayUTF8(48) = không dayUTF8(49) = một dayUTF8(50) = hai dayUTF8(51) = ba dayUTF8(52) = bốn dayUTF8(53) = năm dayUTF8(54) = sáu dayUTF8(55) = bảy dayUTF8(56) = tám dayUTF8(57) = chín Chuyển captio ...