Hiển thị các Label bằng chữ Việt

Published by admin on

Mặc dầu ta có thể dùng MSForm2 Label để hiển thị chữ Việt Unicode, nhưng lúc design ta không thể đánh chữ Tên họ: vào property window của Label1(0) được. Ðể khắc phục điều nầy, ta chứa bản dịch các Caption tiếng Anh của Labels, CommandButtons, Frames ra tiếng Việt trong một XML file tên Labels.xml. Content của nó như sau:

Trong Sub Form_Load() của Form frmEmployees ta đọc file Labels.xml và thay đổi các caption tiếng Anh như sau:

Set MyUnicodeText = New clsUnicodeText 
' Read the list of English=Viet captions
VLabels = MyUnicodeText.ReadUnicode(GetLocalDirectory & "Labels.xml")
' Convert English captions of the Label1s to Vietnamese
For i = 0 To 2
Label1(i).Caption = VietCaptionOf(Label1(i).Caption)
Label1(i).Font.Name = "Tahoma" ' Assign Font Tahoma to it
Next

Cái Sub VietCaptionOf dùng trong việc nầy có listing như dưới đây:

Function VietCaptionOf(OrigCaption) As String 
' Map an English caption to its corresponding Viet Unicode string
Dim StartPos, EndPos
' Append the "=" character
OrigCaption = OrigCaption & "="
' Locate the substring in VLabels
StartPos = InStr(VLabels, OrigCaption)
If StartPos = 0 Then
' Not found - use the caption as is
VietCaptionOf = OrigCaption
Else
' Found - extract the corresponding Viet string
StartPos = StartPos + Len(OrigCaption)
EndPos = InStr(StartPos, VLabels, "|") ' Viet string ends with "|"
' Return the Viet string
VietCaptionOf = Mid(VLabels, StartPos, EndPos - StartPos)
End If
End Function

Class UnicodeEditor
Khi Class Unicode initialises nó instantiates một invisible Form tên frmWorking để dùng một Textbox1 và ListBox1 từ Form ấy. TextBox1 được dùng để chứa LastCh và ListBox1 được dùng để chứa Look-Up table cần cho việc bỏ dấu. Nó đọc các XML files cần thiết và gọi Sub UnicodeTextToListBox để load Unicode Text file vào Listbox1. Các Listings được liệt kê dưới đây:

Sub UnicodeTextToListBox(ByVal Utext, LV) 
Dim Pos
' Split up into lines to load the Listbox LV
Pos = InStr(Utext, vbLf) ' Locate Line Feed character
Do While Pos > 0
' Pluck a line from the left of the UText string and add it to LV
LV.AddItem Left(Utext, Pos - 1)
' Keep the remaining
Utext = Mid(Utext, Pos + 1)
' Locate the next Line Feed character
Pos = InStr(Utext, vbLf)
Loop
LV.AddItem Utext ' Add the last piece of text to Listbox LV
End Sub

' Class clsUnicodeEditor
Private Sub Class_Initialize()
' Instantiate an invisible working form to use its Listbox and Textbox
Set myForm = New frmWorking
' Point local Listbox pointer LV to the Form's Listbox
Set LV = myForm.ListBox1
' Point local TextBox pointer LastCh to the Form's Textbox
Set LastCh = myForm.TextBox1
' Instantiate an object of Class clsUnicodeText to read Unicode Text
Set MyUnicodeText = New clsUnicodeText
' Read the list of Unicode Vowels
UVowels = MyUnicodeText.ReadUnicode(GetLocalDirectory & "UnicodeVowels.xml")
' Read the look-up table for Vowels with squiggles
Vowels = MyUnicodeText.ReadUnicode(GetLocalDirectory & "V1.xml")
' Split up into lines to load the Listbox LV
UnicodeTextToListBox Vowels, LV
mTypingStyle = "VNI" ' use VNI typing style initially
End Sub

Trong Sub Form_Load của frmEmployees ta Instantiate một object của class clsUnicodeEditor rồi attach nó vào cái Textbox cần hổ trợ Việt Unicode typing như sau:

' Instantiate an object of class clsUnicodeEditor
Set TField1 = New clsUnicodeEditor
TField1.Init TextBox1 ' Attache it to TextBox1
' Instantiate an object of class clsUnicodeEditor
Set TField2 = New clsUnicodeEditor
TField2.Init TextBox2 ' Attache it to TextBox2
' Instantiate an object of class clsUnicodeEditor
Set TField3 = New clsUnicodeEditor
TField3.Init TextBox3 ' Attache it to TextBox3

Program có hổ trợ Escape character . Con số theo sau Escape character sẽ không bị dùng vào việc bỏ dấu cho nguyên âm ngay trước đó. Ngoài ra thí dụ User đánh theo lối VNI letter a1, ta sẽ đuợc chữ á, nếu tiếp theo đó User đánh 1 một lần nữa ta sẽ đuợc a1.

Xin lưu ý: Ðể program nầy chạy bỏ dấu đuợc bạn phải tạm thời ngưng các programs như VPSKEYS hay VietKey, UniKey .v.v.. Lý do là các programs kia sẽ giựt trước các keystrokes của những con số 1 đến 9, sau khi kiểm tra rồi không chịu buông ra cho program nầy thấy.