Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Thủ Thuật] Demo Tổng hợp tất cả các kiểu thông báo tiếng việt trong Access
#1
Sau nhiều lần tìm kiếm, sưu tâm về các kiểu thông báo tiếng việt trên Access.
Mạng phép xin tổng hợp tạo thành 1 Demo để cho ai có nhu cầu tìm hiểu và so sánh đánh giá cái nào hay hơn để có thể áp dụng cho bạn thân.
Nếu những bài tông hợp này còn chưa đủ xin các bạn đóng góp thêm

Chú thích: Mỗi 1 demo có áp dụng code riêng của nó.

Hinh 1: Demo Giao diện
[Hình: DemohinhTBTV.png]

Hình 2: * loại Thông báo sắp từ trên xuống dưới
[Hình: Demohinh8TBTiengviet.png]

Hình thông báo thứ 10, Việt hóa 100% cả nút Yes, No, Cancel
[Hình: TBtiengvietLoai10.png]

Chúc các bạn vui khỏe!


File đính kèm
.zip   Ex_Tonghopcackieuthongbaotiengviet.zip (Kích cỡ: 51.74 KB / Tải về: 158)
.zip   Ex_11 Kieu TB tiengviet(Them 02 loai).zip (Kích cỡ: 65.16 KB / Tải về: 153)
Chữ ký của maidinhdan * Để được hỗ trợ tốt nhất, nhấn vào link dưới đây để xem.
1. [Hướng dẫn] Kiểu file gửi lên để được giúp đỡ
2. [Hướng dẫn] Nội quy diễn đàn
3. [Hướng dẫn] Cách Đưa file và hình vào diễn đàn
4.[Hướng dẫn] Để xây dựng một ứng dụng hoàn hảo và lời cảm tạ
5. Cần tìm Demo hay ứng dụng sử dụng thanh tìm kiếm phía trên cùng, bên phải của diễn đàn.
* Nếu muốn cảm ơn, hãy nhấn nút thank, không cần viết thêm bài nào nửa.



ღღღღღTài sản của maidinhdan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Noname , tranthanhan1962 , ledangvan , Minh Tiên , Che_Guevara , khanghychu , phamlong24
#2
Còn 1 cách nửa mà mình chưa trình bày, nhưng cũng có đã sử dụng trong demo trên. Nên mình xin trình bày dưới đây luôn.

Tên gọi: Hàm chuyển chuỗi Unicode tiếng Việt thành Chuỗi mã Unicode trong VBA
Tác giả: Noname
Link liên kêt để trao đổi: http://thuthuataccess.com/forum/thread-4302.html
Tên hàm sử dụng: Chrw( mã unicode)

Cách thức sử dụng:
[Hình: vbaunicode.png]

Bước 1: Bạn viết tiếng việt vào ô như hình phía trên, sau đó ta nhấn nút chuyển, Sau đó copy đoạn chữ mới tạo ra.
Bước 2: Viết hàm MsgBox bình thường trong VBA

Ví dụ: Tôi rất yêu em ======> "Tôi r" & ChrW(7845) & "t yêu em"

=> MsgBox ("Tôi r" & ChrW(7845) & "t yêu em")

Chúc các bạn thành công.

Phần này mình cũng đã bổ sung vào file đính kèm thứ 2 ở bài đầu tiên.


File đính kèm
.zip   HamChr to VBA Uni.zip (Kích cỡ: 10.04 KB / Tải về: 51)
ღღღღღTài sản của maidinhdan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Noname , khanghychu
#3
Smile 
(30-07-15, 12:00 PM)maidinhdan Đã viết: Sau nhiều lần tìm kiếm, sưu tâm về các kiểu thông báo tiếng việt trên Access.
Mạng phép xin tổng hợp tạo thành 1 Demo để cho ai có nhu cầu tìm hiểu và so sánh đánh giá cái nào hay hơn để có thể áp dụng cho bạn thân.
Nếu những bài tông hợp này còn chưa đủ xin các bạn đóng góp thêm
...

Còn một thủ thuật rất hay của bác Ngọc (paulsteigel), Việt hóa hoàn toàn MsgBox:

[Hình: 3176201699_1616880993_574_574.jpg]



MTNQ thêm vào 2 hàm sau để câu lệnh gọi hàm MsgBox nhìn gọn gàng hơn:

Mã:
Function fTxt(strID As String, Optional i As Integer = 1) As String
    Dim fldName As String
    Dim fldNum As Integer
    fldNum = CurrentDb.TableDefs("tblTiengViet").Fields.Count
    If i < 1 Or i >= fldNum Then
        MsgBox "Tham so i phai >0 va <" & fldNum, , "Loi goi ham fTxt"
        Exit Function
    End If
    
    fldName = CurrentDb.TableDefs("tblTiengViet").Fields(i).Name
    fTxt = Nz(DLookup("[" & fldName & "]", "[tblTiengViet]", "[TVID] = '" & strID & "'"))
   
End Function

Function fTitle(Optional i As Integer = 1) As String
    Dim fldName As String
    Dim fldNum As Integer
    fldNum = CurrentDb.TableDefs("tblTiengViet").Fields.Count
    If i < 1 Or i >= fldNum Then
        MsgBox "Tham so i phai >0 va <" & fldNum, , "Loi goi ham fTitle"
        Exit Function
    End If
    
    fldName = CurrentDb.TableDefs("tblTiengViet").Fields(i).Name
    fTitle = Nz(DLookup("[" & fldName & "]", "[tblTiengViet]", "[TVID] = 'tit'"))
   
End Function

Ví Dụ:
Ta có thể gọi:
Mã:
MsgBox fTxt("test"), vbExclamation, fTitle
hoặc:
Mã:
MsgBox fTxt("test", 1), vbExclamation, fTitle(1)
-Với "test" là trường TVID trong bảng tblTiengViet, 1 là chỉ mục (item) của các trường còn lại (mặc định là 1)

hoặc cũng có thể gọi:
Mã:
MsgBox ChrW(272) & "ây là MsgBox Ti" & ChrW(7871) & "ng Vi" & ChrW(7879) & "t!", vbInformation, "Test MsgBox"

Demo MsgBoxTV.rar

P/S: Trong ví dụ MTNQ thay hàm MsgBox của bác Ngọc thành fMsgBox để phân biệt với hàm MsgBox của hệ thống, có gì sai bác bỏ qua nhé  015
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn maidinhdan , Noname , tranthanhan1962 , khanghychu
#4
À, còn một cách khác hiện thông báo bằng Tiếng Việt. Ngắn gọn nhưng khá thú vị ở chỗ có thể tự tắt sau một khoảng thời gian (tính bằng giây):

-Chép hàm sau vào một Module bất kỳ:
Mã:
Function fMsgBoxTimer(strTxt As String, Optional intType As Integer, _
   Optional strTitle As String, Optional ingTime As Integer = 3) As Integer
   Dim objShell As Object
   Set objShell = CreateObject("WScript.Shell")
   
   If strTitle = vbNullString Then strTitle = Application.Name
   
   fMsgBoxTimer = objShell.PopUp(strTxt, ingTime, strTitle, intType)
   Set objShell = Nothing
End Function


-Cách gọi hàm: tương tự như hàm MsgBox nhưng không có  [ helpfile ] và [ context ], thay vào đó là tham số thời gian
 -Nếu tham số ingTime bỏ trống thì thời gian tắt thông báo mặc định là 3s, ta có thể không cho tự động tắt bằng cách gán ingTime = 0

VD:
Mã:
fMsgBoxTimer "Thong bao nay se tu tat sau 1 giay! ", vbInformation, "Test MsgBox", 1

Hoặc:
Mã:
fMsgBoxTimer ChrW(272) & "ây là MsgBox Ti" & ChrW(7871) & "ng Vi" & ChrW(7879) & "t!", vbInformation, "Test MsgBox", 0

-Có một lưu ý là:
Khác với hàm MsgBox, cách này khi đang hiện thông báo, ta vẫn có thể tương tác với các điều khiển khác trên form, nó sẽ tự tắt sau thời gian  đã cài đặt batting eyelashes

MSGBoxTimer.rar
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn Noname , maidinhdan , tranthanhan1962 , khanghychu
#5
(02-08-15, 08:46 AM)MatTroiNguQuen Đã viết: Còn một thủ thuật rất hay của bác Ngọc (paulsteigel), Việt hóa hoàn toàn MsgBox:



MTNQ thêm vào 2 hàm sau để câu lệnh gọi hàm MsgBox nhìn gọn gàng hơn:

Demo MsgBoxTV.rar

P/S: Trong ví dụ MTNQ thay hàm MsgBox của bác Ngọc thành fMsgBox để phân biệt với hàm MsgBox của hệ thống, có gì sai bác bỏ qua nhé  015

Khi dùng hàm này phải tham chiếu đến thư viện: Microsoft Office 11 Libraly hoặc hơn, mới xài được. ( Nếu không nó sẽ báo lỗi tại đoạn msoAlertCancelDefault

Bổ sung lại bài đầu, thêm 02 kiểu thông báo vào. Tính đến hiện tại là 11 Kiểu
Chữ ký của maidinhdan * Để được hỗ trợ tốt nhất, nhấn vào link dưới đây để xem.
1. [Hướng dẫn] Kiểu file gửi lên để được giúp đỡ
2. [Hướng dẫn] Nội quy diễn đàn
3. [Hướng dẫn] Cách Đưa file và hình vào diễn đàn
4.[Hướng dẫn] Để xây dựng một ứng dụng hoàn hảo và lời cảm tạ
5. Cần tìm Demo hay ứng dụng sử dụng thanh tìm kiếm phía trên cùng, bên phải của diễn đàn.
* Nếu muốn cảm ơn, hãy nhấn nút thank, không cần viết thêm bài nào nửa.



ღღღღღTài sản của maidinhdan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Noname , tranthanhan1962 , khanghychu
#6
(03-08-15, 11:28 AM)maidinhdan Đã viết: .....


Mã:
Option Explicit
'=======================================================
' Module for Vietnamized MsgBox function
' This overide default VBA MsgBox function with some small
' modifications of text, button caption....
' Use this MsgBox function like it is in default VBA IDE
'=======================================================
' Import
#If VBA7 Then
    Private Declare PtrSafe Function GetCurrentThreadId Lib "kernel32" () As LongPtr
     
    Private Declare PtrSafe Function SetDlgItemText Lib "user32" _
        Alias "SetDlgItemTextW" _
        (ByVal hDlg As LongPtr, _
         ByVal nIDDlgItem As LongPtr, _
         ByVal lpString As String) As LongPtr
     
    Private Declare PtrSafe Function SetWindowsHookEx Lib "user32" _
        Alias "SetWindowsHookExA" _
        (ByVal idHook As LongPtr, _
         ByVal lpfn As LongPtr, _
         ByVal hmod As LongPtr, _
         ByVal dwThreadID As LongPtr) As LongPtr
     
    Private Declare PtrSafe Function UnhookWindowsHookEx Lib "user32" _
        (ByVal hHook As LongPtr) As LongPtr
     
    ' Handle to the Hook procedure
    Private hHook As LongPtr
#Else
    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
#End If
' Hook type
Private Const WH_CBT = 5
Private Const HCBT_ACTIVATE = 5
 
' Constants
Private Const IDOK = 1
Private Const IDCANCEL = 2
Private Const IDABORT = 3
Private Const IDRETRY = 4
Private Const IDIGNORE = 5
Private Const IDYES = 6
Private 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

Private Enum MsoAlertCancelType
    msoAlertCancelDefault = &HFFFFFFFF
    msoAlertCancelFifth = 4
    msoAlertCancelFirst = 0
    msoAlertCancelFourth = 3
    msoAlertCancelSecond = 1
    msoAlertCancelThird = 2
End Enum

' Application title
Const App_Title = "Sample messagebox"

Function MsgBox(MessageTxt As String, Optional msgStyle As VbMsgBoxStyle, Optional DlgCaption As String = "") As VbMsgBoxResult
    Beep
    Dim msgBoxIcon As Long, msgButton As Long, btnStyle As Long, ErrLoop 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(0, 16, 32, 48, 64)
    For i = 0 To UBound(btnArr)
        msgButton = btnStyle - btnArr(i)
        If msgButton <= 0 Then
            If msgButton = 0 Then
                msgBoxIcon = i
                btnStyle = btnStyle - btnArr(i)
            Else
                msgBoxIcon = i - 1
                btnStyle = btnStyle - btnArr(i - 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 <> "", DlgCaption, App_Title), _
        MessageTxt, msgButton, msgBoxIcon, ButtonDefault, 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
        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 wParam, IDYES, StrConv(StrYes, vbUnicode)
        SetDlgItemText wParam, IDNO, StrConv(StrNo, vbUnicode)
        SetDlgItemText wParam, IDCANCEL, StrConv(StrCancel, vbUnicode)
        SetDlgItemText wParam, IDOK, StrConv(StrOK, vbUnicode)
        SetDlgItemText wParam, IDABORT, StrConv(StrAbort, vbUnicode)
        SetDlgItemText wParam, IDRETRY, StrConv(StrRetry, vbUnicode)
        SetDlgItemText wParam, IDIGNORE, StrConv(StrIgnore, vbUnicode)
        ' Release the Hook
        UnhookWindowsHookEx hHook
    End If
    MsgBoxHookProc = False
End Function

Hùa theo ý kiến của bác Dân, tôi bổ sung bằng đoạn này.
Thực ra không cần tham chiếu đến thư viện của microsoft, chỉ cần định nghĩa một số hằng bổ sung là được vì bản chất các thông tin đó là dạng hằng số thôi.
Mã:
Private Enum MsoAlertCancelType
    msoAlertCancelDefault = &HFFFFFFFF
    msoAlertCancelFifth = 4
    msoAlertCancelFirst = 0
    msoAlertCancelFourth = 3
    msoAlertCancelSecond = 1
    msoAlertCancelThird = 2
End Enum
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 MatTroiNguQuen , maidinhdan , Noname , Minh Tiên , tranthanhan1962 , khanghychu , Che_Guevara
#7
Tôi rất thích Msgbox của bác "pausteigel", đây mới thực sự là hiển thị Tiếng Việt 100%;
Các cách khác cũng rất hay nhưng vẫn chưa Việt hóa 100% vì còn các nút "OK", "Yes", "No", "Cancel", "Abort", "Retry", "Ignore".
Thân./.
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 khanghychu
#8
Bạn pausteigel chỉ giúp cách bổ sung đoạn code:
Private Enum MsoAlertCancelType 
    msoAlertCancelDefault = &HFFFFFFFF

    msoAlertCancelFifth = 4

    msoAlertCancelFirst = 0

    msoAlertCancelFourth = 3

    msoAlertCancelSecond = 1

    msoAlertCancelThird = 2
End Enum
vào chỗ nào ?
Mình copy vào Module trên cứ báo lỗi dòng Private Enum MsoAlertCancelType.
Thân./.
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 khanghychu
#9
(06-08-15, 08:46 AM)Minh Tiên Đã viết: Bạn pausteigel chỉ giúp cách bổ sung đoạn code:
Private Enum MsoAlertCancelType 
    msoAlertCancelDefault = &HFFFFFFFF

    msoAlertCancelFifth = 4

    msoAlertCancelFirst = 0

    msoAlertCancelFourth = 3

    msoAlertCancelSecond = 1

    msoAlertCancelThird = 2
End Enum
vào chỗ nào ?
Mình copy vào Module trên cứ báo lỗi dòng Private Enum MsoAlertCancelType.
Thân./.

Bác ấy thêm ở code phía trên rồi, ở dưới chắc bác ấy là (đã thêm) vào thôi
Chữ ký của ledangvan Xin chào, mình là ledangvan, Tham gia http://thuthuataccess.com/forum từ ngày 22-08 -11.
ღღღღღTài sản của ledangvan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Minh Tiên , khanghychu
#10
(06-08-15, 08:46 AM)Minh Tiên Đã viết: Bạn pausteigel chỉ giúp cách bổ sung đoạn code:Enum MsoAlertCancelType 
vào chỗ nào ?
Mình copy vào Module trên cứ báo lỗi dòng Private Enum MsoAlertCancelType.
Thân./.

Đã bổ sung lại Demo phía trên: Tổng cộng 11 loại, không cần tham chiếu đến thư viện Office 11 or 12.

Chúc các bạn vui vẻ!
Chữ ký của maidinhdan * Để được hỗ trợ tốt nhất, nhấn vào link dưới đây để xem.
1. [Hướng dẫn] Kiểu file gửi lên để được giúp đỡ
2. [Hướng dẫn] Nội quy diễn đàn
3. [Hướng dẫn] Cách Đưa file và hình vào diễn đàn
4.[Hướng dẫn] Để xây dựng một ứng dụng hoàn hảo và lời cảm tạ
5. Cần tìm Demo hay ứng dụng sử dụng thanh tìm kiếm phía trên cùng, bên phải của diễn đàn.
* Nếu muốn cảm ơn, hãy nhấn nút thank, không cần viết thêm bài nào nửa.



ღღღღღTài sản của maidinhdan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Minh Tiên , khanghychu


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
Question [Help] Link tất các table trong một file.mdb bằng VBA MinhnHang 6 143 29-11-16, 05:18 PM
Bài mới nhất: MinhnHang
  Tránh xung đột dữ liệu trong access quocdung9999 16 1,687 23-11-16, 11:13 AM
Bài mới nhất: quocdung9999
  [Hỏi] Kết nối nhiều lần hay kết nối 1 lần trong ADO ưu điểm hơn Minh Tiên 1 114 10-11-16, 10:41 AM
Bài mới nhất: maidinhdan
  Summary bằng VBA trong MS Access. MinhnHang 6 314 08-11-16, 08:36 AM
Bài mới nhất: MinhnHang
  [Hỏi] Số Thứ Tự Theo Nhóm Hàng Hóa Trong Access pherotao 2 135 02-11-16, 03:05 PM
Bài mới nhất: pherotao

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ơ