GaDauBac > 21-03-21, 08:08 PM
(13-05-13, 09:27 AM)paulsteigel Đã viết: Đây là một phiên bản hiển thị thông điệp bằng tiếng Việt Unicode.
Cách sử dụng như sau: các bạn thêm vào 1 Module và copy đoạn code sau vào Module. Thông điệp hiển thị được với MSGBOX này có thể viết bằng tiếng việt Unicode thông thường (dựng sẵn hoặc tổ hợp).
Khi sử dụng chỉ cần gọi Msgbox như thông thường. Ngoài ra, các bạn có thể làm 1 bảng chưa các thông điệp, sau đó viết 1 hàm để tải ra thông điệp và truyền cho MsgBox. Khi thiết kế thông điệp, chúng ta tránh viết hẳn trong Code (hardCode) mà nên đặt tên chuỗi ứng với thông điệp rồi dùng 1 hàm để lấy giá trị theo chuỗi đó.
Ví dụ Msgbox MSG("MSG_CANCEL_CONTRACT"),VbCritical
Trong đó MSG("MSG_CANCEL_CONTRACT") sẽ trả về 1 giá trị có trong CSDL để nói về việc hủy hợp đồng chẳng hạn.
Bài này tôi cũng đã chia sẻ bên GiaiphapExcel.com.
Xin chia sẻ cùng các bạn.
Mã PHP:Option Explicit
' Hàm này để lấy tham chiếu hộp thoại MsgBox của Hệ thống
Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long
' Hàm này để thiết lập tiếng việt cho hộp thoại
Private Declare Function SetDlgItemText Lib "user32" _
Alias "SetDlgItemTextW" _
(ByVal hDlg As Long, _
ByVal nIDDlgItem As Long, _
ByVal lpString As String) As Long
' Hàm này để móc vào hàm hệ thống
Private Declare Function SetWindowsHookEx Lib "user32" _
Alias "SetWindowsHookExA" _
(ByVal idHook As Long, _
ByVal lpfn As Long, _
ByVal hmod As Long, _
ByVal dwThreadId As Long) As Long
' Hàm này bỏ chế độ câu móc hàm hệ thống
Private Declare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As Long
' Handle to the Hook procedure
Private hHook As Long
' Hook type
Private Const WH_CBT = 5
Private Const HCBT_ACTIVATE = 5
' Constants
Public Const IDOK = 1
Public Const IDCANCEL = 2
Public Const IDABORT = 3
Public Const IDRETRY = 4
Public Const IDIGNORE = 5
Public Const IDYES = 6
Public Const IDNO = 7
' Modify this code for English
Private StrYes As String
Private StrNo As String
Private StrOK As String
Private StrCancel As String
' Application title
Private Const xApp_Title = "SEDP Manager"
Function MsgBox(MessageTxt As String, Optional msgStyle As VbMsgBoxStyle) As VbMsgBoxResult
Beep
Dim iVal As VbMsgBoxStyle, msgBoxIcon As MsoAlertIconType, msgButton As MsoAlertButtonType
iVal = msgStyle
Select Case msgStyle
Case 20, 19, 17, 16: ' Critical case
iVal = iVal - 16
msgBoxIcon = msoAlertIconCritical
Case 36, 35, 33, 32: ' Question case
iVal = iVal - 32
msgBoxIcon = msoAlertIconQuery
Case 52, 51, 49, 48: ' Exclamation case
iVal = iVal - 48
msgBoxIcon = msoAlertIconWarning
Case 68, 67, 65, 64: ' Information case
iVal = iVal - 64
msgBoxIcon = msoAlertIconInfo
End Select
Select Case iVal
Case 4:
msgButton = msoAlertButtonYesNo
Case 3:
msgButton = msoAlertButtonYesNoCancel
Case 1:
msgButton = msoAlertButtonOKCancel
Case 0:
msgButton = msoAlertButtonOK
End Select
' Set Hook
hHook = SetWindowsHookEx(WH_CBT, AddressOf MsgBoxHookProc, 0, GetCurrentThreadId)
' Hien thi thong diep...
MsgBox = Application.Assistant.DoAlert(App_Title, MessageTxt, msgButton, msgBoxIcon, msoAlertDefaultFirst, msoAlertCancelDefault, True)
End Function
Private Function MsgBoxHookProc(ByVal lMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If lMsg = HCBT_ACTIVATE Then
' Sua cac thong diep tren nut bam (nut Yes, No, OK, Cancel....
StrYes = "&C" & ChrW(243)
StrNo = "&Kh" & ChrW(244) & "ng"
'StrOK = ChrW(272) & ChrW(7891) & "&ng " & ChrW(253)
StrOK = "Ch" & ChrW(7845) & "p nh" & ChrW(7853) & "&n"
StrCancel = "&H" & ChrW(7911) & "y"
'//// Cau vao he thong de dua gia tri tieng Viet
SetDlgItemText wParam, IDYES, StrConv(StrYes, vbUnicode)
SetDlgItemText wParam, IDNO, StrConv(StrNo, vbUnicode)
SetDlgItemText wParam, IDCANCEL, StrConv(StrCancel, vbUnicode)
SetDlgItemText wParam, IDOK, StrConv(StrOK, vbUnicode)
' Release the Hook
UnhookWindowsHookEx hHook
End If
MsgBoxHookProc = False
End Function
GaDauBac > 21-03-21, 08:10 PM
(13-08-10, 10:10 PM)Noname Đã viết: Gần đây 1 số bạn ở các forum hay hỏi làm cách nào để hiện câu thông báo kiểu msgbox bằng tiếng Việt.
Có 1 số bạn hướng dẫn theo nhiều cách, tuy nhiên mình thấy vẫn chưa hợp lý:
- Cách 1: chỉnh Regional and Language Options thành Tiếng Việt.
Cách này chưa hợp lý ở kiểu gõ và sẽ bị lỗi ở hệ thống bàn phím dùng số.
- Cách 2: thay đổi font hệ thống trong thẻ Appearance. Chuyển thành font TCVN3 hay VNI. Sau khi đóng chương trình, hệ thống sẽ trả về lại như cũ.
Cách này đáp ứng được nhu cầu gõ tếng Việt. Nhưng các ứng dụng khác của toàn windows có liên quan msgbox sẽ bị ảnh hưởng.( thường là Unicode tiếng Việt không đọc được hoặc xấu hoắc). Mặc dù đây là giải pháp được nhiều lập trình viên lựa chọn vì có thể dùng Code tự động, tuy nhiên mình đánh giá rất thấp vì nó ảnh hưởng hệ thống.
- Cách 3: gọi Code của các ký tự có dấu. Cách này hơi phức tạp mỗi khi gọi 1 thông báo.
Và sau đây mình xin giới thiệu 2 phương pháp để có thể có msgbox bằng tiếng Việt Unicode mà không phải thay đổi hệ thống hay phức tạp gì. Mời bạn xem ứng chương trình demo.
Có thắc mắc gì xin hỏi tại đây!
download
ongke0711 > 21-03-21, 10:54 PM
(21-03-21, 08:10 PM)GaDauBac Đã viết: Hôm nay đọc nhưng không Download được.