Gửi tặng các bạn hàm MsgBoxUni hiển thị font tiếng Việt/Unicode (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Nguyễn Duy Tuân

Nghị Hách
Thành viên danh dự
Tham gia
13/6/06
Bài viết
4,779
Được thích
10,292
Giới tính
Nam
Nghề nghiệp
Giáo viên, CEO tại Bluesofts
Hỏi tí

TuanVNUNI đã viết:
Xin giới thiệu các bạn một hàm MsgBox thể hiện được font Unicode, hiển thị được hoàn toàn tiếng Việt.
Xem chi tiết và download tại đây
http://www.bluesofts.net/Baiviet/Laptrinh/VB_VBA/MsgBoxUnicode.htm

Một hàm MsgBox hoàn chỉnh và đầy đủ ở đây
http://www.giaiphapexcel.com/forum/showthread.php?t=1071&page=2

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

Mình đã copy đoạn mã trong trang http://www.bluesofts.net/Baiviet/Laptrinh/VB_VBA/MsgBoxUnicode.htm về và đưa vào module và thử viết một đoạn code
Mã:
Public Sub abc()
MsgBoxUni ("abc")
End Sub
Để hiện thử MsgboxUni nhưng khi đánh tiếng việt theo mã Unicode vào nó vẫn không hiện đúng tiếng Việt mà cứ loằng ngoằng.
Bạn có thể chỉ cụ thể và cho ví dụ được không.
 
Upvote 0
Tu Anh đã viết:
Mình đã copy đoạn mã trong trang http://www.bluesofts.net/Baiviet/Laptrinh/VB_VBA/MsgBoxUnicode.htm về và đưa vào module và thử viết một đoạn code
Mã:
Public Sub abc()
MsgBoxUni ("abc")
End Sub
Để hiện thử MsgboxUni nhưng khi đánh tiếng việt theo mã Unicode vào nó vẫn không hiện đúng tiếng Việt mà cứ loằng ngoằng.
Bạn có thể chỉ cụ thể và cho ví dụ được không.

Bạn hãy download file MsgboxUni.xls về sẽ thấy ví dụ của tôi trong đó. Rất dễ hiểu! Nếu vẫn chưa được tôi sẽ hướng dẫn cụ thể.
 
Upvote 0
Trong VBA thì ổn :-= , còn VB thì chưa được Tuân à. Em kiểm tra lại hay là post riêng file cho VB đi.
 
Upvote 0
PhanTuHuong đã viết:
Trong VBA thì ổn :-= , còn VB thì chưa được Tuân à. Em kiểm tra lại hay là post riêng file cho VB đi.

Em Test kỹ cả trong VB6 rồi, Ok.
Anh lấy một hàm chuyển từ Tcvn3ToUnicode (em tạm gọi tên hàm là UNC)
Chạy trong VB6 như sau

Mã:
MsgBoxUni UNC("VÉn ch¹y b×nh th­êng - Kieu go TCVN3")
 
Upvote 0
Xin gửi các bạn hàm MsgBox hiện font Unicode/hiện tiếng Việt
Phiên bản lần này tôi bổ sung thêm hai hàm chuyển mã
UNC - Hàm chuyển từ TCVN3->Unicode
VNI - Hàm chuyển từ VNI->Unicode

Thêm các thủ tục để test trên Excel và trên VB6, qua các ví dụ giúp các bạn dễ vận dụng hơn.

Mã:
'Không dùng thủ tục TestFontInRANGE trong VB6 (hoac Ver<7)
Sub TestFontInRANGE()
   'Test trong Excel
   MsgBoxUni Range("B3").Value, vbInformation, Range("B4").Value
   MsgBox Range("B3").Value, vbInformation, _
          Range("B4").Value & " - Dung ham MsgBox cua VB/VBA thi loi"
End Sub

Sub TestFontTCVN3()
    'UNC la ham chuyen tu ma TCVN3 sang Unicode
   MsgBoxUni UNC("Céng hoµ x· héi chñ nghÜa ViÖt Nam"), vbInformation, _
             UNC("Chuçi ®­a vµo lµ lµ kiÓu gâ TCVN3")
End Sub

Sub TestFontVNI()
   'VNI la ham chuyen tu ma VNI sang Unicode
   MsgBoxUni VNI("Coäng hoaø xaõ hoäi chuû nghóa Vieät Nam"), vbInformation, _
             VNI("Chuoãi ñöa vaøo laø laø kieåu goõ VNI")
   
End Sub

Xem chi tiết và download tại đây
http://www.bluesofts.net/Baiviet/Laptrinh/VB_VBA/MsgBoxUnicode.htm

Nếu thấy hay và vận dụng được xin đừng quên "Thanks"!;;;;;;;;;;;
 
Upvote 0
Vấn đề lại đặt ra, chúng ta đã làm được với Msgbox vậy còn đối với Caption của form thì sao? Tuân có ý kiến gì không?

Cám ơn Tuân về hàm này.

Lê Văn Duyệt
PS:Qua bài này anh mới biết khi chạy chương trình kiểm phiếu của em, font bị thay đổi, thảo nào cái nút Close của form bị nhỏ đi. Thì ra do đổi font!
 
Upvote 0
levanduyet đã viết:
Vấn đề lại đặt ra, chúng ta đã làm được với Msgbox vậy còn đối với Caption của form thì sao? Tuân có ý kiến gì không?

Cám ơn Tuân về hàm này.

Lê Văn Duyệt
PS:Qua bài này anh mới biết khi chạy chương trình kiểm phiếu của em, font bị thay đổi, thảo nào cái nút Close của form bị nhỏ đi. Thì ra do đổi font!

Caption của form thì bác cứ gán nó cho bằng một ô nào đó, trên đó thể hiện Unicode là được mà.
Em vẫn làm như vậy đấy.
Thân!
 
Upvote 0
Chào OKB,
Nó báo lỗi đây
Caption.jpg


LVD
 
Lần chỉnh sửa cuối:
Upvote 0
levanduyet đã viết:
Vấn đề lại đặt ra, chúng ta đã làm được với Msgbox vậy còn đối với Caption của form thì sao? Tuân có ý kiến gì không?

Cám ơn Tuân về hàm này.

Lê Văn Duyệt
PS:Qua bài này anh mới biết khi chạy chương trình kiểm phiếu của em, font bị thay đổi, thảo nào cái nút Close của form bị nhỏ đi. Thì ra do đổi font!

Unicode trên Form.Caption em sẽ nghiên cứu sau, có lẽ cũng rất khó vì Đại ca VB6 để tạo form anh ta dùng hàm CreateWindowExA, trong khi WINDOWS cung cấp hàm CreateWindowExW để thể hiện Unicode. Có một cách đơn giản nhất là dùng kỹ thuật Subclass form, bẫy sự kiện WM_NCPAINT và dúng hàm API DrawTextW để viết lại caption.
Để làm được form Unicode, chắc chắn phải đụng chạm tới kỹ thuật API-Subclass. Em sẽ nghiên cứu vụ này sau.
 
Upvote 0
Driven: Đừng "dính líu" gì tới Subclass trong vụ này. Không phải cái gì SubClass cũng đúng cả đâu. Vụ này khoảng 5 tới 6 dòng cực đơn giản cho Form thường thôi.

Về vấn đề ứng dụng CSDL, hiện nay mọi người đang tối đa là làm theo mô hình Client/Server 1 Layer nhỉ (từ Sheet, Form connect & exec SQL trực tiếp tới CSDL). Về lâu về dài như thế ko tốt đâu (this advise is not for excellers but for programmers). Anyways, chạy ngắn hạn thì OK.
 
Lần chỉnh sửa cuối:
Upvote 0
smbsolutions đã viết:
Driven: Đừng "dính líu" gì tới Subclass trong vụ này. Không phải cái gì SubClass cũng đúng cả đâu. Vụ này khoảng 5 tới 6 dòng cực đơn giản cho Form thường thôi.

Chỉ 5-6 dòng thôi ah, hóa ra lại dễ vậy. Anh có thể chia sẻ không?

Về vấn đề ứng dụng CSDL, hiện nay mọi người đang tối đa là làm theo mô hình Client/Server 1 Layer nhỉ (từ Sheet, Form connect & exec SQL trực tiếp tới CSDL). Về lâu về dài như thế ko tốt đâu (this advise is not for excellers but for programmers). Anyways, chạy ngắn hạn thì OK.

Vấn đề thiết kế CSDL theo các lớp layer có lẽ mọi người cần anh chỉ dẫn cụ thể thì mới thấy rõ đuợc vấn đề.
 
Upvote 0
Nếu bác smbsolutions biết thì hãy chia sẻ cho mọi người đi, cám ơn bác!
 
Lần chỉnh sửa cuối:
Upvote 0
Cái MsgBoxUni này lấy giá trị trên cell thì đúng nhưng gõ trực tiếp vào VB Editor hoặc copy dán từ bảng tính sang VB Editor thì không được. Có thể sửa được không?

Songmai vẫn dùng được kiểu gán caption bằng giá trị trên cell được mà, levanduyet ơi!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
songmai đã viết:
Cái MsgBoxUni này lấy giá trị trên cell thì đúng nhưng gõ trực tiếp vào VB Editor hoặc copy dán từ bảng tính sang VB Editor thì không được. Có thể sửa được không?
Nhân đây xin nói rõ về việc dùng hàm này trong VBE (Màn hình soạn thảo lệnh).

Giả sử tôi dùng VNI, đầu tiên tôi phải chỉnh bộ gõ như hình sau: (Bộ gõ tôi dùng UniKey)
msgbox1.jpg


Sau đó tôi phải bật bộ gõ gõ tiếng việt. Trong màn hình soạn thảo tôi gõ vào như sau. Chú ý các bạn sẽ không thấy tiếng việt.
msgbox2.jpg


Chú ý: các bạn không cần phải chỉnh font của màn hình soạn thảo VBE.
Ngoài ra bạn còn phải dùng hàm chuyển đổi từ VNI về Unicode giống như hình vẽ

LVD
 
Upvote 0
songmai đã viết:
Cái MsgBoxUni này lấy giá trị trên cell thì đúng nhưng gõ trực tiếp vào VB Editor hoặc copy dán từ bảng tính sang VB Editor thì không được. Có thể sửa được không?

VB Editor không hỗ trợ Unicode, vì thế bạn phải gõ chuỗi kiểu TCVN3 hoặc VNI sau đó dùng hàm UNC và hàm VNI để đổi về Unicode. Bạn download file tổi gửi về và xem các ví dụ test sẽ hiểu.
 
Upvote 0
TuanVNUNI đã viết:
VB Editor không hỗ trợ Unicode, vì thế bạn phải gõ chuỗi kiểu TCVN3 hoặc VNI sau đó dùng hàm UNC và hàm VNI để đổi về Unicode. Bạn download file tổi gửi về và xem các ví dụ test sẽ hiểu.
Tôi có viết hàm UniVba hỗ trợ cho việc nhập chuỗi Unicode vào VB Editor.
ví dụ bạn muốn Msgbox hiển thị câu tiếng Việt có nội dung “Xử lý tiếng Việt”. Bạn nhập vào 1 ô bất kỳ trên bảng tính (ví dụ A1) câu trên, tại 1 ô khác bạn nhập công thức =univba(A1), hàm sẽ cho kết quả:
"X" & ChrW(7917) & " lý ti" & ChrW(7871) & "ng Vi" & ChrW(7879) & "t"
bạn copy kết quả, vào VB Editor dán vào nơi cần nhập. Kết hợp với MsgBoxUni ta sẽ được hộp thoại có nội dung tiếng Việt Unicode.
Ví dụ: MsgboxUni "X" & ChrW(7917) & " lý ti" & ChrW(7871) & "ng Vi" & ChrW(7879) & "t"

Mã:
[/FONT]
Function UniVba(TxtUni As String) As String
If TxtUni = "" Then
UniVba = """"""
Else
TxtUni = TxtUni & " "
If AscW(Left(TxtUni, 1)) < 256 Then UniVba = """"
For n = 1 To Len(TxtUni) - 1
uni1 = Mid(TxtUni, n, 1)
uni2 = AscW(Mid(TxtUni, n + 1, 1))
If AscW(uni1) > 255 And uni2 > 255 Then
UniVba = UniVba & "ChrW(" & AscW(uni1) & ") & "
ElseIf AscW(uni1) > 255 And uni2 < 256 Then
UniVba = UniVba & "ChrW(" & AscW(uni1) & ") & """
ElseIf AscW(uni1) < 256 And uni2 > 255 Then
UniVba = UniVba & uni1 & """ & "
Else
UniVba = UniVba & uni1
End If
Next
If Right(UniVba, 4) = " & """ Then
UniVba = Mid(UniVba, 1, Len(UniVba) - 4)
Else
UniVba = UniVba & """"
End If
End If
End Function
[FONT=Arial]
Bạn tham khảo thêm tại:
http://www.giaiphapexcel.com/forum/showpost.php?p=14579&postcount=1
 
Upvote 0
phamduylong đã viết:
Tôi có viết hàm UniVba hỗ trợ cho việc nhập chuỗi Unicode vào VB Editor.
ví dụ bạn muốn Msgbox hiển thị câu tiếng Việt có nội dung “Xử lý tiếng Việt”. Bạn nhập vào 1 ô bất kỳ trên bảng tính (ví dụ A1) câu trên, tại 1 ô khác bạn nhập công thức =univba(A1), hàm sẽ cho kết quả:
"X" & ChrW(7917) & " lý ti" & ChrW(7871) & "ng Vi" & ChrW(7879) & "t"
bạn copy kết quả, vào VB Editor dán vào nơi cần nhập. Kết hợp với MsgBoxUni ta sẽ được hộp thoại có nội dung tiếng Việt Unicode.
Ví dụ: MsgboxUni "X" & ChrW(7917) & " lý ti" & ChrW(7871) & "ng Vi" & ChrW(7879) & "t"

Mã:
Function UniVba(TxtUni As String) As String
If TxtUni = "" Then
UniVba = """"""
Else
TxtUni = TxtUni & " "
If AscW(Left(TxtUni, 1)) < 256 Then UniVba = """"
For n = 1 To Len(TxtUni) - 1
uni1 = Mid(TxtUni, n, 1)
uni2 = AscW(Mid(TxtUni, n + 1, 1))
If AscW(uni1) > 255 And uni2 > 255 Then
UniVba = UniVba & "ChrW(" & AscW(uni1) & ") & "
ElseIf AscW(uni1) > 255 And uni2 < 256 Then
UniVba = UniVba & "ChrW(" & AscW(uni1) & ") & """
ElseIf AscW(uni1) < 256 And uni2 > 255 Then
UniVba = UniVba & uni1 & """ & "
Else
UniVba = UniVba & uni1
End If
Next
If Right(UniVba, 4) = " & """ Then
UniVba = Mid(UniVba, 1, Len(UniVba) - 4)
Else
UniVba = UniVba & """"
End If
End If
End Function
Bạn tham khảo thêm tại:
http://www.giaiphapexcel.com/forum/showpost.php?p=14579&postcount=1
Phức tạp nhỉ :

Gõ Unicode " Xử lý tiếng Việt", ----UniVba--->Chuỗi---CopyVBE--->MsgboxUni--->" Xử lý tiếng Việt"

Có thể gộp 2 hàm này thành 1 không các bác ??

VD:
Trong VBE viết :
"Xử lý Tiếng Việt"---->MsgboxABCD-->" Xử lý tiếng Việt"

Thân!
 
Upvote 0
phamduylong đã viết:
Tôi có viết hàm UniVba hỗ trợ cho việc nhập chuỗi Unicode vào VB Editor.
ví dụ bạn muốn Msgbox hiển thị câu tiếng Việt có nội dung “Xử lý tiếng Việt”. Bạn nhập vào 1 ô bất kỳ trên bảng tính (ví dụ A1) câu trên, tại 1 ô khác bạn nhập công thức =univba(A1), hàm sẽ cho kết quả:
"X" & ChrW(7917) & " lý ti" & ChrW(7871) & "ng Vi" & ChrW(7879) & "t"
bạn copy kết quả, vào VB Editor dán vào nơi cần nhập. Kết hợp với MsgBoxUni ta sẽ được hộp thoại có nội dung tiếng Việt Unicode.
Ví dụ: MsgboxUni "X" & ChrW(7917) & " lý ti" & ChrW(7871) & "ng Vi" & ChrW(7879) & "t"

Mã:
[/FONT]
Function UniVba(TxtUni As String) As String
If TxtUni = "" Then
UniVba = """"""
Else
TxtUni = TxtUni & " "
If AscW(Left(TxtUni, 1)) < 256 Then UniVba = """"
For n = 1 To Len(TxtUni) - 1
uni1 = Mid(TxtUni, n, 1)
uni2 = AscW(Mid(TxtUni, n + 1, 1))
If AscW(uni1) > 255 And uni2 > 255 Then
UniVba = UniVba & "ChrW(" & AscW(uni1) & ") & "
ElseIf AscW(uni1) > 255 And uni2 < 256 Then
UniVba = UniVba & "ChrW(" & AscW(uni1) & ") & """
ElseIf AscW(uni1) < 256 And uni2 > 255 Then
UniVba = UniVba & uni1 & """ & "
Else
UniVba = UniVba & uni1
End If
Next
If Right(UniVba, 4) = " & """ Then
UniVba = Mid(UniVba, 1, Len(UniVba) - 4)
Else
UniVba = UniVba & """"
End If
End If
End Function
[FONT=Arial]
Bạn tham khảo thêm tại:
http://www.giaiphapexcel.com/forum/showpost.php?p=14579&postcount=1

Vâng, như vậy là ta có thêm giải pháp nhập chuỗi vào hàm MsgBoxUni. Theo cách của bạn thì ta đã xử lý chuỗi về cách thể hiện Unicode nên lúc chạy sẽ nhanh hơn. Cảm ơn bạn.

Mr Okebab đã viết:
Phức tạp nhỉ :
...
Trong VBE viết :
"Xử lý Tiếng Việt"---->MsgboxABCD-->" Xử lý tiếng Việt"
Ta chỉ làm được điều trên nếu VBE hỗ trợ Unicode. Trong VB.NET thì làm thế được.

Trong VB.NET
Mã:
        MessageBox.Show("Xử lý Tiếng Việt")

Trong VB (kể cả các ngôn ngữ thông dụng khác như:Visual C++;Visual Foxpro; Delphi), làm việc với Unicode là cực kỳ phức tạp, thế nên các phần mềm của Việt Nam viết trước đây (của những công ty tin học có tên tuổi hẳn hoi) phần lớn không dùng Unicode mà toàn phải chỉnh lại font của hệ thống về dạng font VNI, TCVN(ABC).

Vấn đề Unicode trên VB khó khăn thế đấy, còn vấn đề Caption của Userform chưa hiện được, bác smbsolusion bảo chỉ mất có 5-6 dòng mà chưa thấy giải quyết gì? Khi dảnh tôi sẽ tìm cách viết, chỉ cần kỹ thuật Subclass chắc là Ok thôi.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom