Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Tạo Msgbox hoàn toàn bằng Tiếng Việt.
#11
Bạn xem thủ tục của mình, thực ra mình không xử lý vụ đấy trong thủ tục. Để làm được yêu cầu của bạn, cần sửa trong thủ tục msgbox của mình để xem yêu cầu đầu vào msgStyle có chứa quy định về nút mặc định không? Sau đó phiên giải ra câu lệnh cuối cùng.
Do mình chia sẻ thủ tục từ ứng dụng của mình nên việc này không được đưa vào. Nếu bạn muốn, hãy quan sát một tẹo và thử các tình huống từ đó điều chỉnh biến hằng số msoAlertDefaultFirst và msoAlertCancelDefault thành biến số quy định vị trí nút mặc định như mình làm ở đoạn
Mã PHP:
Select Case msgStyle
    
Case 20191716' Critical case
        iVal = iVal - 16
        msgBoxIcon = msoAlertIconCritical
    Case 36, 35, 33, 32: ' 
Question case
        
iVal iVal 32
        msgBoxIcon 
msoAlertIconQuery
    
Case 52514948' Exclamation case
        iVal = iVal - 48
        msgBoxIcon = msoAlertIconWarning
    Case 68, 67, 65, 64: ' 
Information case
        
iVal iVal 64
        msgBoxIcon 
msoAlertIconInfo
    End Select 
Nghiên cứu kỹ và bạn sẽ có kết quả - ông Bill ngày xưa chắc chắn tính đến điểm này vì ông ấy cho phép truyền tham số dạng
Mã PHP:
msgbox "hi",vbYesNoCancel +vbDefaultButton3 +vbCritical 
Có gì chia sẻ kết quả nhé. Nếu bạn thấy mất thời gian quá thì bẩu tôi!
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn Minh Tiên
#12
Mình "gà lắm" nhìn các "con số" của bạn gọi ra mà phát "Mù" ! Chịu đấy. Phiền bạn giúp mình luôn đi nhé ! Cảm ơn nhiều !
Chữ ký của Minh Tiên -----------------------------------------------
Đường tuy ngắn, không đi không đến
Việc tuy nhỏ, không làm không nên.
                                           Tuân Tử
-----------------------------------------------
Reply
Những người đã cảm ơn
#13
Đây, gửi bạn - mình đã sửa lại tương đối, nhưng có thể chưa kiểm soát hết lỗi. Bạn hãy đưa đoạn code này vào một module và gọi bình thường như hàm MsgBox nhé....Nếu có phát hiện điểm gì bất cập thì bạn cứ yêu cầu!
Mã PHP:
Option Explicit
'=======================================================
Module for Vietnamized MsgBox function
' This overides default VBA MsgBox function with some small
modifications of textbutton caption....
' Use this MsgBox function like it is in default VBA IDE
'
=======================================================
' Import
Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long
 
Private Declare Function SetDlgItemText Lib "user32" _
    Alias "SetDlgItemTextW" _
    (ByVal hDlg As Long, _
     ByVal nIDDlgItem As Long, _
     ByVal lpString As String) As Long
 
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
 
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
Private StrRetry As String
Private StrIgnore As String
Private StrAbort As String

Application title
Private Const App_Title "MsgBox Demo function..."

Function MsgBox(MessageTxt As StringOptional msgStyle As VbMsgBoxStyleOptional DlgCaption As String "") As VbMsgBoxResult
    Beep
    
    Dim msgBoxIcon 
As LongmsgButton As LongbtnStyle As LongErrLoop As Boolean
    Dim ButtonDefault 
As Long
    
    
' Determine what button is default....
    Dim btnArr As Variant, i As Long
    btnArr = Array(0, 256, 512, 768)
    For i = 0 To UBound(btnArr)
        btnStyle = msgStyle - btnArr(i)
        If btnStyle < 0 Then
            ButtonDefault = i - 1
            btnStyle = msgStyle - btnArr(i - 1)
            ErrLoop = True
            Exit For
        End If
    Next
    
    ' 
Determine Icon...
    
btnArr = Array(016324864)
    For 
0 To UBound(btnArr)
        
msgButton btnStyle btnArr(i)
        If 
msgButton <= 0 Then
            
If msgButton 0 Then
                msgBoxIcon 
i
                btnStyle 
btnStyle btnArr(i)
            Else
                
msgBoxIcon 1
                btnStyle 
btnStyle btnArr(1)
            
End If
            
ErrLoop True
            
Exit For
        
End If
    
Next
    
If ErrLoop Then
        
' get the button style
        If msgButton < 0 Then msgButton = btnStyle
        
        ' 
clear error if number of button is smaller than the default setting...
        If 
ButtonDefault msgButton Then ButtonDefault msgButton
    
Else
        
ButtonDefault 0
        msgButton 
0
        msgBoxIcon 
0
    End 
If
    
' Set Hook
    hHook = SetWindowsHookEx(WH_CBT, AddressOf MsgBoxHookProc, 0, GetCurrentThreadId)
    ' 
Display the messagebox
    MsgBox 
Application.Assistant.DoAlert(IIf(DlgCaption <> ""DlgCaptionApplication.Name), _
        MessageTxt
msgButtonmsgBoxIconButtonDefaultmsoAlertCancelDefaultTrue)
End Function
 
Private Function 
MsgBoxHookProc(ByVal lMsg As LongByVal wParam As LongByVal lParam As Long) As Long
    
If lMsg HCBT_ACTIVATE Then
        StrYes 
"&C" ChrW(243)
        
StrNo "&Kh" ChrW(244) & "ng"
        
StrOK "Ch" ChrW(7845) & "p nh" ChrW(7853) & "&n"
        
StrCancel "&H" ChrW(7911) & "y"
        
StrRetry "&Th" ChrW(7917) & " l" ChrW(7841) & "i"
        
StrAbort "&D" ChrW(7915) & "ng"
        
StrIgnore "&B" ChrW(7887) & " qua"
  
        
SetDlgItemText wParamIDYESStrConv(StrYesvbUnicode)
        
SetDlgItemText wParamIDNOStrConv(StrNovbUnicode)
        
SetDlgItemText wParamIDCANCELStrConv(StrCancelvbUnicode)
        
SetDlgItemText wParamIDOKStrConv(StrOKvbUnicode)
        
SetDlgItemText wParamIDABORTStrConv(StrAbortvbUnicode)
        
SetDlgItemText wParamIDRETRYStrConv(StrRetryvbUnicode)
        
SetDlgItemText wParamIDIGNOREStrConv(StrIgnorevbUnicode)
        
' Release the Hook
        UnhookWindowsHookEx hHook
    End If
    MsgBoxHookProc = False
End Function 
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn Minh Tiên , MatTroiNguQuen
#14
Chạy OK rồi ! Cảm ơn bạn nhiều !
File Demo Msgbox_TiengViet
Thân chào !
Chữ ký của Minh Tiên -----------------------------------------------
Đường tuy ngắn, không đi không đến
Việc tuy nhỏ, không làm không nên.
                                           Tuân Tử
-----------------------------------------------
Reply
Những người đã cảm ơn MatTroiNguQuen
#15
Chào bạn "pausteigel" !
tmtien261 thấy trong đoạn code bạn hướng dẫn có gạch chân các chữ cái để dùng phím tắt như:
StrYes = "&C" & ChrW(243)
StrNo = "&Kh" & ChrW(244) & "ng"
StrOK = "Ch" & ChrW(7845) & "p &nh" & ChrW(7853) & "n"
StrCancel = "&H" & ChrW(7911) & "y"
StrRetry = "&Th" & ChrW(7917) & " l" & ChrW(7841) & "i"
StrAbort = "&D" & ChrW(7915) & "ng"
StrIgnore = "&B" & ChrW(7887) & " qua"
Xong khi thực hiện gọi thì mình thấy chỉ có nút StrOK là có gạch chân chữ n (Chấp nhận). Còn các nút khác thì ko hiển thị gạch chân.
Bạn xem lại giúp nhé ! Thanks !
Chữ ký của Minh Tiên -----------------------------------------------
Đường tuy ngắn, không đi không đến
Việc tuy nhỏ, không làm không nên.
                                           Tuân Tử
-----------------------------------------------
Reply
Những người đã cảm ơn
#16
Tôi dùng với office 2003, 2010 thì không thấy có hiện tượng này. Có thể bạn kiểm tra kỹ nhé - 1 không được trùng ký tự, 2 không dùng ký tự tiếng việt (Đ, ậ ..) làm phím tắt. Bạn thử nhấn Alt xem phím tắt có nổi lên không nhé.
Có gì bạn cứ phản hồi!
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn
#17
(27-10-13, 12:55 PM)paulsteigel Đã viết: Tôi dùng với office 2003, 2010 thì không thấy có hiện tượng này. Có thể bạn kiểm tra kỹ nhé - 1 không được trùng ký tự, 2 không dùng ký tự tiếng việt (Đ, ậ ..) làm phím tắt. Bạn thử nhấn Alt xem phím tắt có nổi lên không nhé.
Có gì bạn cứ phản hồi!

Mình dùng acc 2007. Mình đã kiểm tra rồi: ko dùng tiếng Việt, không trùng. Không biết còn thiếu khai báo gì không ? Hoặc có yếu tố gì đó chưa ổn định !
- Khi hiển thị nếu từ 2 nút trở lên thì ko có gạch chân.
- Nếu bấm Alt thì có hiển thị, nhưng lúc có đầy đủ, lúc chỉ 1 hoặc không gạch chân chữ nào.
- Khi bỏ Alt ra thì lúc còn gạch chân, lúc không có.
Cảm ơn bạn nhiều !
Chữ ký của Minh Tiên -----------------------------------------------
Đường tuy ngắn, không đi không đến
Việc tuy nhỏ, không làm không nên.
                                           Tuân Tử
-----------------------------------------------
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Phần mềm siêu âm viết bằng Access danhxetnghiem 23 3,215 13-10-16, 01:14 PM
Bài mới nhất: danhxetnghiem
  Sử dụng query và các hàm trong report để hoàn thành báo cao nhanh nhất trungminh 5 313 25-09-16, 09:45 PM
Bài mới nhất: trungminh
  [Help] Hiển thị giá trị biến tòan cục ra TextBox ddluyendla 2 161 12-07-16, 04:59 PM
Bài mới nhất: maidinhdan
  Cách tạo số thứ tự bằng kí tự a b c... xuannguyen13 1 428 20-04-15, 11:19 AM
Bài mới nhất: morosumo
  Thiết kế bảng lương co nhiều bảng lương tren cùng 1 trang A4. nguyenvantien87 1 501 19-09-14, 12:00 AM
Bài mới nhất: tiennd67

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ