📄 mdl_unicode.bas
字号:
Attribute VB_Name = "mdl_Unicode"
Option Explicit
Public Const MIIM_DATA& = &H20
Public Const MIIM_TYPE& = &H10
Public Type MENUITEMINFO
cbSize As Long
fMask As Long
fType As Long
fState As Long
wID As Long
hSubMenu As Long
hbmpChecked As Long
hbmpUnchecked As Long
dwItemData As Long
dwTypeData As String
cch As Long
End Type
Public Declare Function MessageBox _
Lib "user32.dll" _
Alias "MessageBoxW" (ByVal hWnd As Long, _
ByVal lpText As Long, _
ByVal lpCaption As Long, _
ByVal wType As Long) As Long
Public Declare Function GetSubMenu _
Lib "user32" (ByVal hMenu As Long, _
ByVal nPos As Long) As Long
Public Declare Function GetMenu _
Lib "user32" (ByVal hWnd As Long) As Long
Public Declare Function GetMenuItemCount _
Lib "user32" (ByVal hMenu As Long) As Long
Public Declare Function GetMenuItemInfo _
Lib "user32" _
Alias "GetMenuItemInfoW" (ByVal hMenu As Long, _
ByVal un As Long, _
ByVal b As Long, _
lpMenuItemInfo As MENUITEMINFO) As Long
Public Declare Function SetMenuItemInfo _
Lib "user32" _
Alias "SetMenuItemInfoW" (ByVal hMenu As Long, _
ByVal un As Long, _
ByVal bool As Boolean, _
lpcMenuItemInfo As MENUITEMINFO) As Long
Public Sub VietHoaMenu(frm As Form)
Dim hMenu&
hMenu = GetMenu(frm.hWnd)
VietnameseMenu hMenu
End Sub
Public Function IsUnicode(s As String) As Boolean
Dim i As Long
Dim bLen As Long
Dim Map() As Byte
If LenB(s) Then
Map = s
bLen = UBound(Map)
For i = 1 To bLen Step 2
If (Map(i) > 0) Then
IsUnicode = True
Exit Function
End If
Next
End If
End Function
Public Sub VietnameseMenu(ByVal hMenu As Long)
Dim hSubMenu&, i%, nCnt%, sTmp$
Dim MII As MENUITEMINFO
nCnt = GetMenuItemCount(hMenu)
If nCnt Then
For i = 0 To nCnt - 1
MII.cbSize = LenB(MII)
MII.fMask = MIIM_TYPE Or MIIM_DATA
MII.dwTypeData = String(&HFF, 0)
MII.cch = Len(MII.dwTypeData)
' MII.hbmpChecked = MF_CHECKED Or MF_UNCHECKED
'lay chuoi ten cua Menu
GetMenuItemInfo hMenu, i, True, MII
MII.dwTypeData = StrConv(MII.dwTypeData, vbFromUnicode)
sTmp = Left$(MII.dwTypeData, MII.cch)
'Viet lai chuoi ten cua Menu va chuyen no sang Unicode
If Not IsUnicode(sTmp) Then sTmp = VniStrToUni(sTmp)
sTmp = StrConv(sTmp, vbUnicode) 'note
MII.dwTypeData = sTmp
SetMenuItemInfo hMenu, i, True, MII
'lay Menu con cua mot MenuItem
hSubMenu = GetSubMenu(hMenu, i)
If hSubMenu Then
VietnameseMenu hSubMenu
End If
Next
End If
End Sub
Public Function VniStrToUni(sVniStr As String)
Dim i As Integer, j As Integer
Dim sCurChar As String, sPreChar As String, sPreText As String
For j = 1 To 2
For i = 2 To Len(sVniStr)
sCurChar = Mid$(sVniStr, i, 1)
sPreText = Left$(sVniStr, i - 2)
sPreChar = Mid$(sVniStr, i - 1, 1)
Select Case sCurChar
Case "1"
Select Case sPreChar
'a
Case "a": sVniStr = sPreText & ChrW$(&HE1) & Right$(sVniStr, Len(sVniStr) - i)
Case "A": sVniStr = sPreText & ChrW$(&HC1) & Right$(sVniStr, Len(sVniStr) - i)
Case ChrW$(&HE2): sVniStr = sPreText & ChrW$(&H1EA5) & Right$(sVniStr, Len(sVniStr) - i)
Case ChrW$(&HC2): sVniStr = sPreText & ChrW$(&H1EA4) & Right$(sVniStr, Len(sVniStr) - i)
Case ChrW$(&H103): sVniStr = sPreText & ChrW$(&H1EAF) & Right$(sVniStr, Len(sVniStr) - i)
Case ChrW$(&H102): sVniStr = sPreText & ChrW$(&H1EAE) & Right$(sVniStr, Len(sVniStr) - i)
'e
Case "e": sVniStr = sPreText & ChrW$(&HE9) & Right$(sVniStr, Len(sVniStr) - i)
Case "E": sVniStr = sPreText & ChrW$(&HC9) & Right$(sVniStr, Len(sVniStr) - i)
Case ChrW$(&HEA): sVniStr = sPreText & ChrW$(&H1EBF) & Right$(sVniStr, Len(sVniStr) - i)
Case ChrW$(&HCA): sVniStr = sPreText & ChrW$(&H1EBE) & Right$(sVniStr, Len(sVniStr) - i)
'i
Case "i": sVniStr = sPreText & ChrW$(&HED) & Right$(sVniStr, Len(sVniStr) - i)
Case "I": sVniStr = sPreText & ChrW$(&HCD) & Right$(sVniStr, Len(sVniStr) - i)
'o
Case "o": sVniStr = sPreText & ChrW$(&HF3) & Right$(sVniStr, Len(sVniStr) - i)
Case "O": sVniStr = sPreText & ChrW$(&HD3) & Right$(sVniStr, Len(sVniStr) - i)
Case ChrW$(&HF4): sVniStr = sPreText & ChrW$(&H1ED1) & Right$(sVniStr, Len(sVniStr) - i)
Case ChrW$(&HD4): sVniStr = sPreText & ChrW$(&H1ED0) & Right$(sVniStr, Len(sVniStr) - i)
Case ChrW$(&H1A1): sVniStr = sPreText & ChrW$(&H1EDB) & Right$(sVniStr, Len(sVniStr) - i)
Case ChrW$(&H1A0): sVniStr = sPreText & ChrW$(&H1EDA) & Right$(sVniStr, Len(sVniStr) - i)
'u
Case "u": sVniStr = sPreText & ChrW$(&HFA) & Right$(sVniStr, Len(sVniStr) - i)
Case "U": sVniStr = sPreText & ChrW$(&HDA) & Right$(sVniStr, Len(sVniStr) - i)
Case ChrW$(&H1B0): sVniStr = sPreText & ChrW$(&H1EE9) & Right$(sVniStr, Len(sVniStr) - i)
Case ChrW$(&H1AF): sVniStr = sPreText & ChrW$(&H1EE8) & Right$(sVniStr, Len(sVniStr) - i)
'y
Case "y": sVniStr = sPreText & ChrW$(&HFD) & Right$(sVniStr, Len(sVniStr) - i)
Case "Y": sVniStr = sPreText & ChrW$(&HDD) & Right$(sVniStr, Len(sVniStr) - i)
End Select
Case "2"
Select Case sPreChar
'a
Case "a": sVniStr = sPreText & ChrW$(&HE0) & Right$(sVniStr, Len(sVniStr) - i)
Case "A": sVniStr = sPreText & ChrW$(&HC0) & Right$(sVniStr, Len(sVniStr) - i)
Case ChrW$(&HE2): sVniStr = sPreText & ChrW$(&H1EA7) & Right$(sVniStr, Len(sVniStr) - i)
Case ChrW$(&HC2): sVniStr = sPreText & ChrW$(&H1EA6) & Right$(sVniStr, Len(sVniStr) - i)
Case ChrW$(&H103): sVniStr = sPreText & ChrW$(&H1EB1) & Right$(sVniStr, Len(sVniStr) - i)
Case ChrW$(&H102): sVniStr = sPreText & ChrW$(&H1EB0) & Right$(sVniStr, Len(sVniStr) - i)
'e
Case "e": sVniStr = sPreText & ChrW$(&HE8) & Right$(sVniStr, Len(sVniStr) - i)
Case "E": sVniStr = sPreText & ChrW$(&HC8) & Right$(sVniStr, Len(sVniStr) - i)
Case ChrW$(&HEA): sVniStr = sPreText & ChrW$(&H1EC1) & Right$(sVniStr, Len(sVniStr) - i)
Case ChrW$(&HCA): sVniStr = sPreText & ChrW$(&H1EC0) & Right$(sVniStr, Len(sVniStr) - i)
'i
Case "i": sVniStr = sPreText & ChrW$(&HEC) & Right$(sVniStr, Len(sVniStr) - i)
Case "I": sVniStr = sPreText & ChrW$(&HCC) & Right$(sVniStr, Len(sVniStr) - i)
'o
Case "o": sVniStr = sPreText & ChrW$(&HF2) & Right$(sVniStr, Len(sVniStr) - i)
Case "O": sVniStr = sPreText & ChrW$(&HD2) & Right$(sVniStr, Len(sVniStr) - i)
Case ChrW$(&HF4): sVniStr = sPreText & ChrW$(&H1ED3) & Right$(sVniStr, Len(sVniStr) - i)
Case ChrW$(&HD4): sVniStr = sPreText & ChrW$(&H1ED2) & Right$(sVniStr, Len(sVniStr) - i)
Case ChrW$(&H1A1): sVniStr = sPreText & ChrW$(&H1EDD) & Right$(sVniStr, Len(sVniStr) - i)
Case ChrW$(&H1A0): sVniStr = sPreText & ChrW$(&H1EDC) & Right$(sVniStr, Len(sVniStr) - i)
'u
Case "u": sVniStr = sPreText & ChrW$(&HF9) & Right$(sVniStr, Len(sVniStr) - i)
Case "U": sVniStr = sPreText & ChrW$(&HD9) & Right$(sVniStr, Len(sVniStr) - i)
Case ChrW$(&H1B0): sVniStr = sPreText & ChrW$(&H1EEB) & Right$(sVniStr, Len(sVniStr) - i)
Case ChrW$(&H1AF): sVniStr = sPreText & ChrW$(&H1EEA) & Right$(sVniStr, Len(sVniStr) - i)
'y
Case "y": sVniStr = sPreText & ChrW$(&H1EF3) & Right$(sVniStr, Len(sVniStr) - i)
Case "Y": sVniStr = sPreText & ChrW$(&H1EF2) & Right$(sVniStr, Len(sVniStr) - i)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -