Cách hiển thị tiếng Việt trong các MsgBox()

  • Thread starter Nguyễn Đức Duy
  • Ngày gửi
N

Nguyễn Đức Duy

Guest
16/4/06
11
0
0
Mỹ Hào Hưng Yên
Mình có vài font hệ thống có thể giúp các bạn gõ tiếng việt thoải mái trong các ứng dụng VBA nhưng không biết upload lên bằng cách nào, các bạn chỉ cho mình nhé.
Cụ thể hiện các thông báo bẳng tiếng Việt khi bạn viết trong VBA để hiện ra màn hình Excel (bạn có thể dùng cách gõ Unicode hoặc TCVN3 cũng hiện ra đúng tiếng Việt)
Bạn nào biết cách upload bảo mình nhé.
 
Khóa học Quản trị dòng tiền
B

Bình_OverAC

Over Abnormal / Crazy
14/5/04
846
10
18
42
Nha Trang
Theo tui được biết:
- Không dùng được font Unicode trong Msgbox
- Nếu bác dùng font TCVN3 thì có thể chỉnh font hệ thống để có thể hiện ra được tiếng Việt. Tuy nhiên nếu bác dùng ở máy người khác thì phải chỉnh luôn ở máy người ta để người ta có thể dùng được font hệ thống TCVN3 như bác.
Nếu bác thắc mắc về việc chỉnh font hệ thống thế nào em xin phép được nói chuyện đó sau.
Ngoài ra nếu không dùng được cái Msgbox bạn có thể tạo ra một cái msgbox cho riêng mình có thể dùng Unicode được đấy. Nhưng để viết Unicode trong VBA lại là một khó khăn khác.
 
Đào Việt Cường

Đào Việt Cường

Moderator
22/11/05
400
4
18
Khánh Hòa
Dear Bình_OverAC
-----------------
Thì Bình cứ nhận lời giúp Nguyễn Đức Duy đưa font hệ thống chia sẻ cho mọi người đi! Hi vọng đây có thể là một giải pháp mà nếu đúng là như vậy thì mọi người đỡ phải vất vả làm cái myMsgBox nữa!:smileysex
 
N

Nguyễn Đức Duy

Guest
16/4/06
11
0
0
Mỹ Hào Hưng Yên
Đúng như bác Bình nói, để máy khác nhận được các thông báo tiếng Việt được viết bằng VBA thì đương nhiên phải cài các font này vào máy đó (công việc này cũng chẳng khó khăn lắm mà) có mấy ai đổi máy liên tục đâu phải không các bác, hệ thống máy của công ty em dùng ổn lắm mà, chỉ cần một lần install fonts là xong
 
Y

Yeudoi

Trung cấp
29/9/05
88
0
6
Hoi An Quang Nam
Tôi thấy nếu được như vậy thì quá tốt rồi còn gì, các mod còn chờ gì nữa mà không chuyển giúp mọi người.
 
B

Bình_OverAC

Over Abnormal / Crazy
14/5/04
846
10
18
42
Nha Trang
Các bác hiểu sai ý của em rồi. chuyện này không những liên quan đến chuyện cài font mà còn là chuyện chỉnh font của toàn bộ các msgbox trong toàn hệ thống của windows.
Đây là các bước đổi font hệ thống của windows.
1. Chọn Control Panel --> Display (hoặc click chuột phải ngoài màng hình desktop rồi chọn tab appearance
Appearance.jpg
2. Chọn Advance rồi chọn "Message box" combobox Item và chọn font TCVN3 trong combobox font, trong hình sau em chọn cở font là 10, font .vnCourier
AdvanceAppearance.jpg
3. Ví dụ.
Testfont.jpg

Như vậy ở tất cả các máy sài chương trình của bác, bác phải cài font và đổi font hệ thống như trên thì mới hiện ra được tiếng Việt như ý bác muốn.
Chúc bác thành công
 
hai2hai

hai2hai

VNUNI Makes a difference
29/4/04
2,032
125
63
50
Hà nội
vnuni.net
Nguyễn Đức Duy nói:
Đúng như bác Bình nói, để máy khác nhận được các thông báo tiếng Việt được viết bằng VBA thì đương nhiên phải cài các font này vào máy đó (công việc này cũng chẳng khó khăn lắm mà) có mấy ai đổi máy liên tục đâu phải không các bác, hệ thống máy của công ty em dùng ổn lắm mà, chỉ cần một lần install fonts là xong

Đây ko phải là cách hiển thị MSGBOX tiếng việt theo bảng mã Unicode mà chỉ là hiện thị tiếng việt (bằng bảng mã khác như TCVN3) và phải cài font tương ứng với bảng mã đó lên, đối tượng label trong MSGBOX của hệ thống (windows) được đổi font thành cái font mới được add vào.

Vấn đề ở đây là KHÔNG ĐƯỢC THAY ĐỔI FONT HỆ THỐNG (ĐỐI VỚI BẤT KỲ ĐỐI TƯỢNG NÀO CỦA WINDOWS)
2 cách để giải quyết vấn đề:
1. Unicode cái msgbox và quan trọng là phải hook cái msgbox của windows
2. Hook msgbox của windows và viết tiếng việt theo chuẩn khác Unicode (Vẫn phải add thêm 1 font vào Fonts nhưng không thay đổi font hệ thống của đối tượng label của msgbox).

Mình đang có 1 DLL làm theo cách thứ 2 (mọi thứ đều thuần Việt) nhưng đó lại là 1 commecial active DLL (Bán chứ ko Free). Nếu ai muốn thì contact với hai2hai (qua email) để mình gửi DLL đó để evaluate (Khi sử dụng thì trên caption của msgbox hiện chữ "Bản chưa đăng ký").

Khi bạn cắm cái DLL đó vào project thì hầu như ko phải viết thêm tý code nào cả (ngoài việc Init cái Object thôi)
 
N

Nguyễn Đức Duy

Guest
16/4/06
11
0
0
Mỹ Hào Hưng Yên
Đúng như bác Bình giải thích ở trên, em làm chỉ việc thay đổi thuộc tính msgbox() của Windows là các msgbox của em nó cứ chạy ngon ơ mà windows chưa bao giờ làm sao hết, vài cái font e định share cho mọi người có thể hiện được tiếng Việt trong các comboBox, các validation...nữa, các font này nằm ở trong bộ ABC cũ rích đó, em lưu từ vài năm trước, bây giờ dùng thấy hay hay (các bác còn bộ ABC cũ xem system font nó nằm ở đâu thì cóp sang bộ font của Windows đang sử dụng) Theo em nghĩ thì nó CHẲNG ẢNH HƯỞNG GÌ TỚI WINDOW cả Mong nhận được sự chỉ bảo của các bác.
 
hai2hai

hai2hai

VNUNI Makes a difference
29/4/04
2,032
125
63
50
Hà nội
vnuni.net
Nguyễn Đức Duy nói:
Đúng như bác Bình giải thích ở trên, em làm chỉ việc thay đổi thuộc tính msgbox() của Windows là các msgbox của em nó cứ chạy ngon ơ mà windows chưa bao giờ làm sao hết, vài cái font e định share cho mọi người có thể hiện được tiếng Việt trong các comboBox, các validation...nữa, các font này nằm ở trong bộ ABC cũ rích đó, em lưu từ vài năm trước, bây giờ dùng thấy hay hay (các bác còn bộ ABC cũ xem system font nó nằm ở đâu thì cóp sang bộ font của Windows đang sử dụng) Theo em nghĩ thì nó CHẲNG ẢNH HƯỞNG GÌ TỚI WINDOW cả Mong nhận được sự chỉ bảo của các bác.

1/ Nó thì ko ảnh hưởng đến Windows (Chứ ko phải là Window - Chữ s thể hiện đó là 1 HĐH đấy) nhưng nó sẽ ảnh hưởng đến các ứng dụng khác (giả sử ứng dụng khác viết dựa trên Unicode chẳng hạn.) Vì vậy các ứng dụng cài trên 1 máy nên tuân thủ chế độ chuẩn của HĐH Windows để còn cho các ứng dụng khác còn chạy. Không hiểu bạn có hình dung ra vấn đề này ko?

2/ Khi bạn cài chương trình trên máy khác, bạn lại thay đổi thuộc tính Font của các objects khác của HĐH Windows.

Nói chung cách của bạn là 1 cách mà mọi người rất thường hay dùng (thậm chí rất nhiều công ty làm "phần mềm" đang dùng). Nhưng theo tớ, xét trên quan điểm bảo vệ người dùng thì cho dù chương trình dùng các bảng mã không phải là Unicode thì cũng KHÔNG NÊN thay đổi lại font của các đối tượng của Windows. Khi tớ đi cài các ứng dụng theo chuẩn Unicode trên máy tính khác thì suốt ngày phải chỉnh lại fonts của các các objects của Windows trở về giá trị cũ của nó nhưng sau đó các khách hàng lại kêu cả là ko hiện tiếng Việt trong PM của tớ (họ nói là ... mất fonts, ko có tiếng Việt) và khi tớ đến thì ... ôi thôi, đâu lại vào đấy (là do NCC của các cty khác đến sửa lại fonts chuẩn của các objects trên windows theo của riêng họ)

P/S: Tớ cũng có những PM phải làm theo TCVN3 (mặc dù có thể Unicode được) nhưng hầu như ko ảnh hưởng đến các đối tượng chuẩn của windows (Kể cả msgbox và menu, windows caption, v.v...).
 
B

Bình_OverAC

Over Abnormal / Crazy
14/5/04
846
10
18
42
Nha Trang
Em đồng ý với bác hai2hai về việc các cty phần mềm đi chỉnh sửa lại các font mặc định của hệ thống là điểu không nên làm và có thể nói là một cách sửa sai hết sức buồn cười. Tuy nhiên. Nếu chỉ là một chương trình VBA bình thường, trong điều kiện giới hạn thì việc này không có gì là quá đáng.
Em nghĩ bác Nguyễn Đức Duy cũng như em, chỉ mới vở lòng abc mấy chữ VBA, một chương trình mà ở đó có những cái xa tầm với quá thì chắc là bọn em sẽ không làm. Bản thân em không thích chỉnh sửa font hệ thống, chỉ là nếu đã thích thì em chiều vậy thôi. Em chỉ muốn nêu ra những cách mà em biết. Bản thân em thì thà dùng tiếng Việt VNQR còn hơn là chỉnh font hệ thống, Unicode cho msgbox có lẻ là quá xa xỉ đối với em.
 
hai2hai

hai2hai

VNUNI Makes a difference
29/4/04
2,032
125
63
50
Hà nội
vnuni.net
Ah, Không có gì đâu Bình ơi. Chỉ là giải thích thêm về Font thôi.

Em làm chỉ việc thay đổi thuộc tính msgbox() của Windows là các msgbox của em nó cứ chạy ngon ơ mà windows chưa bao giờ làm sao hết, vài cái font e định share cho mọi người có thể hiện được tiếng Việt trong các comboBox, các validation...nữa, các font này nằm ở trong bộ ABC cũ rích đó, em lưu từ vài năm trước, bây giờ dùng thấy hay hay (các bác còn bộ ABC cũ xem system font nó nằm ở đâu thì cóp sang bộ font của Windows đang sử dụng). Theo em nghĩ thì nó CHẲNG ẢNH HƯỞNG GÌ TỚI WINDOW cả

Mình chỉ giải thích thêm về vấn đề font thôi vì mình sợ có thể có nhiều người hiểu nhầm về font nên mình cố gắng giải thích là mọi người hiện đang dùng theo cách nào và có thể còn có những cách nào khác.

Ngoài vấn đề về font thì các vấn đề như Regional Settings như Date, Number format thì các chương trình nên thiết kế là độc lập với môi trường hệ thống (Người dùng có thể thiết lập dd/mm/yyyy hay m/d/yy là tùy họ và chương trình nên là không bị ảnh hưởng gì. Đây cũng là vấn đề không phải dễ sử lý đâu và rất dễ gây hiểu nhầm là chương trình có lỗi).

Cheers!

P?S: Mọi thứ nói ở trên ko liên quan gì tới .NET
 
Đào Việt Cường

Đào Việt Cường

Moderator
22/11/05
400
4
18
Khánh Hòa
Dear all,
-------
Ban đầu mình cũng bị hiểu nhầm là có loại font mà không cần điều chỉnh (bằng tay) Appearence của Windows cũng cho phép hiển thị tiếng Việt có dấu trên MsgBox. Mình cũng hiểu hầu hết các nhà phát triển ứng dụng không ai thích cách "điều chỉnh bằng tay" này mỗi khi cài đặt phần mềm của họ cho khách hàng. Nhất là ở "ta" tồn tại hai kiểu gõ phổ biến phân biệt giữa hai miền Nam - Bắc là TCVN3 và VNI. Vậy thì vì lý do gì mà cái việc tưởng như đơn giản ấy vẫn chưa được phổ biến để mọi người giảm bớt công việc của mình?

Dear hai2hai,
------------
Ngoại trừ những người có sức khoẻ như anh 2 ("húc" được cả MS Windows!) thì hầu hết các lập trình viên không chuyên như tụi em chưa có công cụ nào để xây dựng một myMsgBox tương đối độc lập với Windows.
Với trình độ hạn chế của em, em hiểu rằng có một thủ tục nào đó có thể can thiệp vào Regetry để hiệu trỉnh Font Name hoặc Short Date Format. Nhưng mà em tìm mãi chưa ra nên nêu vấn đề ra đây mong lĩnh hội thêm từ các anh.
Còn về hiệu chỉnh Decimal symbol và Digit grouping symbol, may thay từ Office 10.0 cung cấp cho chúng ta UseSystemSeparators để chúng ta dễ dàng hiệu chỉnh "." hay "," khi cần thiết. Sau đây là thủ minh hoạ khi mở một Workbook thì chương trình đưa ra thông điệp và tự động hiệu chỉnh UseSystemSeparators:
Private Sub Workbook_Open()
If CStr(Date) <> Format(Date, "dd/mm/yyyy") Then
MsgBox "Bạn kiểm tra lại: ngày hệ thống trên máy tính của bạn đang là " & Date, vbExclamation, "Sai định dạng ngày!"
End If
If Application.UseSystemSeparators Then Application.UseSystemSeparators = False
If Application.ThousandsSeparator <> "." Then
Application.ThousandsSeparator = "."
Application.DecimalSeparator = ","
End If
End Sub
Thủ tục trên còn rất hạn chế và có vẻ hơi lạc so chủ đề này, nhưng mục đích thì vẫn là mong mọi người cùng nhau chia sẻ, biết đâu lại có giải pháp thật là đơn giản!:friend:
 
Sửa lần cuối:
hai2hai

hai2hai

VNUNI Makes a difference
29/4/04
2,032
125
63
50
Hà nội
vnuni.net
Hi Cường,

em hiểu rằng có một thủ tục nào đó có thể can thiệp vào Regetry để hiệu trỉnh Font Name hoặc Short Date Format.

Còn về hiệu chỉnh Decimal symbol và Digit grouping symbol, may thay từ Office 10.0 cung cấp cho chúng ta UseSystemSeparators để chúng ta dễ dàng hiệu chỉnh "." hay "," khi cần thiết.

Hình như Cường vẫn chưa hiểu ý của anh rồi. :)

Ý anh là KHÔNG ĐIỀU CHỈNH GÌ (KỂ CẢ BẰNG TAY LẪN BẰNG LẬP TRÌNH) đối với môi trường hệ thống. Nghĩa là người dùng muốn làm gì về môi trường thì mặc, chương trình của ta ko ảnh hưởng gì cả (ngay cả khi đang chạy chương trình mà người dùng changes mọi thứ thì PM vẫn hoạt động bình thường). (PS: Hiện nay A-Excel vẫn phụ thuộc vào môi trường của Windows, phải chỉnh sửa lại định dạng ngày của hệ thống)

Mấy cái anh nói ở trên cũng ko có gì khó lắm đâu. Tất cả là nhờ tý tiếng Anh + Internet. (Cách học mà khi anh nói ra thì mọi người bảo là Spam bài ấy). Nhưng đúng là thực sự nhiều cái ko tưởng (ko chỉ lập trình thôi đâu) có thể tìm thấy trên Internet mà. Hình như có cả bài hướng dẫn cách thiết kế xây dựng 1 ... quả bom trên Internet đấy. :cool2:
 
adam_tran

adam_tran

Guitar inspiration
17/5/05
1,374
36
48
46
Goooogle
Xì pam bài tí: Em thì em tống hết mấy cái text cần thiết lên 1 sheet nào đấy, khi cần thì cứ "móc" ra cho khỏe, hơi củ chuối nhưng... đảm bảo!
 
N

Nguyễn Đức Duy

Guest
16/4/06
11
0
0
Mỹ Hào Hưng Yên
Bác Adam_tran nói hay quá, em thêm "xáng kiến" nữa là thiết kế các form sẵn có chứa các thông báo được định sẵn và hiển thị các loại font hiển thị chữ Việt mà không ảnh hưởng hoặc liên quan gì đến hệ thống, khi chương trình chạy đến đoạn thông báo bằng MsgBox() thì ta thay bằng UserformXXX.show -> form này chứa thông báo, hê hê, liệu có củ chuối không nhỉ, không biết bác nào dùng chưa nhỉ, em thì kết hợp các loại tây, ta, tàu đủ cả để làm chương trình cỏn còn con của mình.
 
B

Bình_OverAC

Over Abnormal / Crazy
14/5/04
846
10
18
42
Nha Trang
Ý kiến của bác Adam_Trần không củ chuối tí nào. Đó là cách làm phổ biến hiện nay.
@Nguyễn Đức Huy: cũng có lý khi bác tự tạo được myMsgbox. Tuy nhiên các này lại đụng tới một số vấn đề về việc tạo các tùy chọn về nút lệnh, giá trị hàm trả về để xử lý ... Hình như nó sẽ không tốt bằng việc dùng Msgbox() có sẳn. Tuy nhiên nếu việc hiện tiếng Việt là cần thiết và quan trọng như thế thì chắc là em cũng sẽ làm như bác ==> tạo ra MyMsgbox().
Chúc bác thàng công.
 
hai2hai

hai2hai

VNUNI Makes a difference
29/4/04
2,032
125
63
50
Hà nội
vnuni.net
À đúng rồi, cách của Nguyễn Đức Huy hiện nhiều người rất hay sử dụng.

Hình như nó sẽ không tốt bằng việc dùng Msgbox() có sẳn

Bình nói cũng rất đúng (và rất có kinh nghiệm đấy). Không hẳn là không tốt bằng mà 2 việc: raise 1 cái msgbox lên và show 1 cái form đó bề ngoài thì nó có vẻ giống nhau nhưng bản chất là khá khác nhau đấy. Nhất là mọi người đang thử show form đó trong MDI form thì thấy forcus từ MDI form đã chuyển sang form mà mình show (myMsgbox). Nhưng raise msgbox chuẩn của VB lên thì forcus vẫn là MDI form.
 
hai2hai

hai2hai

VNUNI Makes a difference
29/4/04
2,032
125
63
50
Hà nội
vnuni.net
À đúng rồi, cách của Nguyễn Đức Huy hiện nhiều người rất hay sử dụng.

Hình như nó sẽ không tốt bằng việc dùng Msgbox() có sẳn

Bình nói cũng rất đúng (và rất có kinh nghiệm đấy). Không hẳn là không tốt bằng mà 2 việc: raise 1 cái msgbox lên và show 1 cái form đó bề ngoài thì nó có vẻ giống nhau nhưng bản chất là khá khác nhau đấy. Nhất là mọi người đang thử show form đó trong MDI form thì thấy forcus từ MDI form đã chuyển sang form mà mình show (myMsgbox). Nhưng raise msgbox chuẩn của VB lên thì forcus vẫn là MDI form.
 
F

fthaoabc

Guest
14/8/06
6
1
0
46
Yên Bái
khkt.net
Tui cũng đã làm Form MyMgBox và dùng đúng các font Tahoma để viết ra nội dung các biến Text viết bằng mã ABC. Và phải viết thủ tục FormLoad dùng các hàm viết sẵn để chuyển các biến Text mã ABC sang UNICODE...

Sẽ chia sẻ nếu bạn nào cần...
 
  • Like
Reactions: ZUNGNN
B

Bình_OverAC

Over Abnormal / Crazy
14/5/04
846
10
18
42
Nha Trang
fthaoabc nói:
Tui cũng đã làm Form MyMgBox và dùng đúng các font Tahoma để viết ra nội dung các biến Text viết bằng mã ABC. Và phải viết thủ tục FormLoad dùng các hàm viết sẵn để chuyển các biến Text mã ABC sang UNICODE...
Sẽ chia sẻ nếu bạn nào cần...
Sẽ thật hay nếu bác viết cái MyMgbox thành module hoàn chỉnh, hoặc tương đối hoàn chỉnh (giống cái Msgbox của VB) thì em nghĩ mọi người sẽ rất biết ơn bác về sự chia sẽ này. Cảm ơn bác trước nhé.
 

Xem nhiều

Webketoan Zalo OA