Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Msg Box tiếng Việt Unicode có định dạng chữ đậm
#1
Khi tiếng Việt có Font chữ Unicode thì Msgbox Access lại không tương thích (bị lỗi font). Điều này làm đau đầu nhiều cao thủ Access. Trước đây mình cũng tham khảo tham gia nhiều diễn đàn về cách xử lý vụ việc này, nhưng thật ra mình cũng chưa thỏa mãn.
Nhớ lại thời gian mới có access 2003 (lúc đó xử dụng với font Vni nên không bị lỗi font). Khi còn xử dụng Access 97, MsgBox của nó cho phép định dạng chữ đậm, xuống hàng dễ dàng nên mình thích msgBox 97 hơn 2003. Cuối cùng mình đã xử lý được hàm gọi lại chức năng này trong Access 2003.
Thời gian gần đây khi tham gia trở lại Thủ thuật Access mình hay lục lọi tàng kinh các để có cái post lên cho vui cùng các bạn thì thật bất ngờ. Nó lại tương thích với Unicode.
Mình post lên đây bạn nào thích thì dùng.

[Hình: X7vxJzF.png]

Cách thực hiện cũng đơn giản. Trước hết tạo một table có tên là TB (thông báo) có 2 field là ID và ND. Để tạo nội dung cho VietUniMsgBox.

[Hình: Mvt7qrz.png]

Tạo một module chứa function
Mã PHP:
Function VietUniMsgBox(Prompt As String_
 Optional Buttons 
As VbMsgBoxStyle vbOKOnly_
 Optional Title 
As String vbNullString_
 Optional HelpFile 
As Variant_
 Optional Context 
As Variant_
 
As VbMsgBoxResult
    
If IsMissing(HelpFile) Or IsMissing(ContextThen
        FormattedMsgBox 
= Eval("MsgBox(""" Prompt _
         
""", " Buttons ", """ Title """)")
    Else
        
FormattedMsgBox = Eval("MsgBox(""" Prompt _
         
""", " Buttons ", """ Title """, """ _
         HelpFile 
""", " Context ")")
    
End If
End Function 
Gọi VietUniMsgBox Kiểu 1
Mã PHP:
VietUniMsgBox DLookup("[ND]""TB""[ID] = 2"), vbCritical vbAbortRetryIgnoreDLookup("[ND]""TB""[ID] = 1"
Gọi VietUniMsgBox Kiểu 2
Mã PHP:
VietUniMsgBox DLookup("[ND]""TB""[ID] = 4"), vbExclamation vbSystemModalDLookup("[ND]""TB""[ID] = 3"
Gọi VietUniMsgBox Kiểu 3
Mã PHP:
VietUniMsgBox DLookup("[ND]""TB""[ID] = 6"), vbQuestionDLookup("[ND]""TB""[ID] = 5"

Nếu không thích tạo thêm table và dùng hàm Dlookup để gọi nội dung thông báo cho Msgbox các bạn có thể dịch thẳng nội dung ra mã font rồi đưa trực tiếp vào VietUniMsgBox mà không cần phải thêm thao tác nào.
Gọi VietUniMsgBox Kiểu 1
Mã PHP:
VietUniMsgBox ChrW(272) & "ây là MsgBox Ti" ChrW(7871) & "ng Vi" ChrW(7879_
"t!@Không l" ChrW(7895) & "i Font Unicode ti" ChrW(7871) & "ng Vi" _
ChrW(7879) & "t.@Có th" ChrW(7875) & " t" ChrW(7841) & "o ch" _
ChrW
(7919) & " nét " ChrW(273) & ChrW(7853) & "m."vbCritical _
vbAbortRetryIgnore
"Msg Box Ti" ChrW(7871) & "ng Vi" ChrW(7879) & "t" 
Gọi VietUniMsgBox Kiểu 2
Mã PHP:
VietUniMsgBox "Th" ChrW(7911) & " thu" ChrW(7853_
"t Acess là trang web b" ChrW(7893) & " ích cho m" _
ChrW(7885) & "i ng" ChrW(432) & ChrW(7901) & "i."_
vbExclamation 
vbSystemModal"Trân tr" ChrW(7885_
"ng thông báo!" 
Gọi VietUniMsgBox Kiểu 3
Mã PHP:
VietUniMsgBox "           Công cha nh" ChrW(432) & _
" núi thái s" ChrW(417) & "n." vbCrLf _
"Ngh" ChrW(297) & "a m" ChrW(7865) & " nh" _
ChrW(432) & " n" ChrW(432) & ChrW(7899) & _
"c trong ngu" ChrW(7891) & "n ch" ChrW(7843_
"y ra."vbQuestion"Ca dao Vi" ChrW(7879) & "t Nam" 
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
#2
Nếu bạn Nào thích Msgbox Uni TV đơn giản thì làm vậy cũng ok nè Trên VBA hay VB6 điều được Tuốt Còn VB.Net thì Cóc Cần  014 014 014
Mã PHP:
Public Sub MsgboxUni_TiengViet()
    CreateObject("WScript.Shell").PopUp "Ki" ChrW(7873) & "u M" ChrW(7841) & "nh Xin Chào", , "Thông Báo"vbInformation
End Sub 
Chữ ký của kieu manh kieu manh,gia nhập Thủ Thuật Access từ 21-06 -15.
Reply
Những người đã cảm ơn Noname , tranthanhan1962 , bvchauthanh , khanghychu
#3
Hỏi: Đoạn code nào cho phép chữ đậm vậy? hay chỉ khi sử dụng tham số vbCritical + vbAbortRetryIgnore mới có chữ đậm. Xin giải thích dùm em.
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 bvchauthanh
#4
(20-07-15, 06:03 PM)maidinhdan Đã viết: Hỏi: Đoạn code nào cho phép chữ đậm vậy? hay chỉ khi sử dụng tham số vbCritical + vbAbortRetryIgnore mới có chữ đậm. Xin giải thích dùm em.
Khi có ký tự @ thì dòng đầu tiên sẽ có chữ đậm còn tham số vb thì vẫn sử dụng bình thường như Msgbox.
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn bvchauthanh , maidinhdan , Noname
#5
(20-07-15, 07:47 PM)tranthanhan1962 Đã viết:
(20-07-15, 06:03 PM)maidinhdan Đã viết: Hỏi: Đoạn code nào cho phép chữ đậm vậy? hay chỉ khi sử dụng tham số vbCritical + vbAbortRetryIgnore mới có chữ đậm. Xin giải thích dùm em.
Khi có ký tự @ thì dòng đầu tiên sẽ có chữ đậm còn tham số vb thì vẫn sử dụng bình thường như Msgbox.

Thế đặt ký tự @ vào vị trí nào vậy bạn vì trên code phía trên (dùng table) mình không thấy ký tự @ ở đâu cả, mong bạn chỉ giáo
Chữ ký của bvchauthanh
rose"Luôn luôn lắng nghe
Lâu lâu mới.... hiểu." rose
Reply
Những người đã cảm ơn
#6
(20-07-15, 09:28 PM)bvchauthanh Đã viết: Thế đặt ký tự @ vào vị trí nào vậy bạn vì trên code phía trên (dùng table) mình không thấy ký tự @ ở đâu cả, mong bạn chỉ giáo

Hì hì, bạn nhìn kỹ trong table tại ID 2 Nội dung nó là:
Đây là MsgBox Tiếng Việt@Không lỗi … tiếng Việt.@Có thể…
Có 2 chữ @, một nằm giữa hai từ Việt và Không, chữ thứ 2 nằm giữa 2 từ Việt. và Có. Khi access biên dịch mã thì sẽ kiểm tra đoạn nội dung thông báo xem có @ không để xử lý in đậm đoạn nội dung phía trước ký tự @ đầu tiên. Nên bạn có quyền đặt nó bất kỳ ở đâu dù trực tiêp trong code hay tham chiếu giá trị của biến qua table đều có giá trị như nhau
Chú ý:
-         Phải có đủ 2 ký tự @ trong nội dung thông báo, nếu chỉ có một ký tự @ nó sẽ viết liền như @ là một ký tự thông thường.
-         Ký tự @ thứ 2 còn có nhiệm vụ xuống dòng.
-         Nếu không muốn xuống dòng trong đoạn sau. @ phải đặt nằm cuối đoạn thông báo.
-         Không xử dụng dấu @ thứ 3 để xuống dòng vì nội dung sau dấu @ thứ 3 sẽ bị cắt mất. Nếu muốn xuống dòng nữa phải xử dụng từ khóa vbCrLf
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn maidinhdan , bvchauthanh , Noname , nguyenichtri , khanghychu
#7
Bài viết rất bổ ích, thanks bạn rất nhiều.
Chữ ký của bvchauthanh
rose"Luôn luôn lắng nghe
Lâu lâu mới.... hiểu." rose
Reply
Những người đã cảm ơn
#8
Mình đọc mà chưa hiểu chổ này nha,bạn giải thích giúp mình nhs:
Mình muốn dùng msg tv cho thông báo trùng mả số hs thì mình làm sao? Để dịch ra font vietunimsg như trên thì dịch sao vậy bàn?
Chữ ký của rainkv rainkv,gia nhập Thủ Thuật Access từ 12-07 -15.
Reply
Những người đã cảm ơn
#9
Để báo lỗi bằng tiếng Việt trước hiết bạn phải xử lý bẩy lỗi của bạn hay dịch lỗi của Access.
Để xử lý lỗi của access bạn phải tra xem nó lỗi gì và dịch thông báo của nó ra tiếng Việt, rồi xử lý trong Form_Error.
Ví dụ trùng mã khóa chính là lỗi 3058
Private Sub Form_Error(DataErr As Integer, Response As Integer)
Select Case DataErr
Case 3058
VietUniMsgBox “thông báo lỗi” 
End Select
End Sub
 
Muốn chuyển đổi chuỗi bạn vào bài “Hàm chuyển chuỗi Unicode tiếng Việt thành Chuỗi mã Unicode trong VBA” của bác Noname nghiên cứu.
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#10
Đã sử dụng hàm này, phát hiện vấn đề là: ( chỉ hiện thông báo tiếng việt)

Nếu có tham số đi kèm, để bắt code Yes, No, Cancel dùng không được. anh Ân test lại code dùm và xin vài ý kiến từ anh.


Cụ thể đoạn code sau: Khi nhấn Yes vẫn hiện  MsgBox "Da huy lenh"

Mã PHP:
Private Sub Command0_Click()
Dim xacnhan As Long
xacnhan 
VietUniMsgBox (ChrW(272) & "ây là MsgBox Ti" ChrW(7871) & "ng Vi" ChrW(7879_
"t!@Không l" ChrW(7895) & "i Font Unicode ti" ChrW(7871) & "ng Vi" _
ChrW(7879) & "t.@Có th" ChrW(7875) & " t" ChrW(7841) & "o ch" _
ChrW
(7919) & " nét " ChrW(273) & ChrW(7853) & "m."vbCritical vbYesNo"Msg Box Ti" ChrW(7871) & "ng Vi" ChrW(7879) & "t")

   If xacnhan vbYes Then
   MsgBox 
"Da ok"
       Else
   MsgBox 
"Da huy lenh"
   End If
End Sub 
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


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Thủ Thuật] Demo_Chọn ngày tháng bằng nút (No Calender Tiếng việt) maidinhdan 7 1,397 25-06-16, 12:44 AM
Bài mới nhất: zinzin8x
  Hàm đọc số dùng mã Unicode trong Access Noname 28 11,695 23-03-16, 11:45 PM
Bài mới nhất: thiennamlong
  [Thủ Thuật] Hỏi_Xác định phiên bản Access đang dùng maidinhdan 1 378 18-12-15, 08:43 AM
Bài mới nhất: ongke0711
  Hướng Dẫn Demo Cho tất cả thông báo tiếng việt vào một Macro maidinhdan 3 988 23-07-15, 03:09 PM
Bài mới nhất: maidinhdan
  [Thủ Thuật] Demo gửi Email có thêm file đính kèm Access maidinhdan 0 680 09-04-15, 11:22 PM
Bài mới nhất: maidinhdan

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ơ