-
01-18-2009, 10:41 PM #1Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 0
Hiển thị Tiếng việt tại các MsgBox
Như bạn đã biết, ngôn ngữ được dùng để lập trình trong Access là VBA (Visual Basic for Application). Cũng như nhiều phần tử giao diện khác của 1 ứng dụng, hàm MsgBox() dùng font hệ thống để hiển thị thông tin, do đó để thông tin tiếng Việt được hiển thị bởi hàm MsgBox() luôn đúng và đọc được, bạn phải khai báo lại tên các font hệ thống cần dùng cho ứng dụng. Có 2 cách khai báo lại tên font thường dùng như sau:
o Khai báo thủ công như bạn đã làm (vào Control Panel.Display.Properties.Appearance để chỉnh lại). Cách này quá phiền hà cho người dùng như bạn đã thấy.
o Khai báo tự động bằng phần mềm, qui trình điển hình như sau:
1. Cài font tiếng Việt cần dùng cho ứng dụng vào Windows, việc này thường được thực hiện trong trình Setup và chỉ cần thực hiện 1 lần.
2. Mỗi khi chương trình chạy, nó đọc sơ đồ font của hệ thống rồi lưu giữ sơ đồ này trong chương trình, sau đó chương trình thiết lập lại sơ đồ mới dùng font tiếng Việt riêng. Hàm SetSysFont() bằng VB được liệt kê dưới đây sẽ thực hiện chức năng này.
3. Cho chương trình hoạt động bình thường.
4. Khi chương trình kết thúc, nó phục hồi sơ đồ font hệ thống trước đó lại cho Windows. Hàm RestoreSysFont() được liệt kê dưới đây sẽ thực hiện chức năng này.
Lưu ý hàm API phục vụ cho việc đọc/thiết lập sơ đồ font có tên là "SystemParametersInfo". Đoạn chương trình VB sau đây thực hiện các công đoạn trên. Chương trình gồm 1 form đơn giản có 1 button tên là Command0, khi form được chạy, hàm Form_Load sẽ thiết lập font hệ thống tiếng Việt theo yêu cầu của ứng dụng, hàm Command0_Click() demo việc gọi hàm MsgBox() để hiển thị văn bản tiếng Việt, hàm Form_Unload() sẽ phục hồi lại sơ đồ font hệ thống như trước khi form được chạy.
Option Compare Database
' Khai báo các hằng
Const SPI_GETNONCLIENTMETRICS = 41
Const SPI_SETNONCLIENTMETRICS = 42
Const SPI_GETICONTITLELOGFONT = 31
Const SPI_SETICONTITLELOGFONT = 34
' Khai báo kiểu cần dùng
Private Type LOGFONT
lfHeight As Long
lfWidth As Long
lfEscapement As Long
lfOrientation As Long
lfWeight As Long
lfItalic As Byte
lfUnderline As Byte
lfStrikeOut As Byte
lfCharSet As Byte
lfOutPrecision As Byte
lfClipPrecision As Byte
lfQuality As Byte
lfPitchAndFamily As Byte
lfFaceName As String * 32
End Type
Private Type NONCLIENTMETRICS
cbSize As Long
iBorderWidth As Long
iScrollWidth As Long
iScrollHeight As Long
iCaptionWidth As Long
iCaptionHeight As Long
lfCaptionFont As LOGFONT
iSmCaptionWidth As Long
iSmCaptionHeight As Long
lfSmCaptionFont As LOGFONT
iMenuWidth As Long
iMenuHeight As Long
lfMenuFont As LOGFONT
lfStatusFont As LOGFONT
lfMessageFont As LOGFONT
End Type
'Khai báo các biến
Dim m_nonClientMetrics As NONCLIENTMETRICS
Dim m_logFont As LOGFONT
'Khai báo các biến chứa sơ đồ font
Dim m_fontCaption As String * 32
Dim m_fontSmCaption As String * 32
Dim m_fontMenu As String * 32
Dim m_fontMessage As String * 32
Dim m_fontStatus As String * 32
Dim m_fontIcon As String * 32
'Khai báo hàm Windows API cần dùng
Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByRef lpvParam As Any, ByVal fuWinIni As Long) As Boolean
' Thủ tục thiết lập sơ đồ font hệ thống Windows về tiếng Việt
Private Sub SetSysFont(fontname As String)
' Truy xuất sơ đồ font hệ thống hiện tại
m_nonClientMetrics.cbSize = Len(m_nonClientMetrics)
ret = SystemParametersInfo(SPI_GETNONCLIENTMETRICS, Len(m_nonClientMetrics), m_nonClientMetrics, 0)
ret = SystemParametersInfo(SPI_GETICONTITLELOGFONT, Len(m_logFont), m_logFont, 0)
' Cất lại font dùng hiển thị các Caption
m_fontCaption = m_nonClientMetrics.lfCaptionFont.lfFaceName
' Cất lại font dùng hiển thị các Caption nhỏ
m_fontSmCaption = m_nonClientMetrics.lfSmCaptionFont.lfFaceName
' Cất lại font dùng hiển thị các Menu
m_fontMenu = m_nonClientMetrics.lfMenuFont.lfFaceName
' Cất lại font dùng hiển thị các hộp thoại thông báo
m_fontMessage = m_nonClientMetrics.lfMessageFont.lfFaceName
' Cất lại font dùng hiển thị thông tin ở thanh trạng thái và tooltips
m_fontStatus = m_nonClientMetrics.lfStatusFont.lfFaceName
' Cất lại font dùng hiển thị tên các Icon chương trình
m_fontIcon = m_logFont.lfFaceName
' Thay đổi thành font chữ tiếng Việt
m_nonClientMetrics.lfCaptionFont.lfFaceName = fontname & vbNullChar
m_nonClientMetrics.lfSmCaptionFont.lfFaceName = fontname & vbNullChar
m_nonClientMetrics.lfMenuFont.lfFaceName = fontname & vbNullChar
m_nonClientMetrics.lfMessageFont.lfFaceName = fontname & vbNullChar
m_nonClientMetrics.lfStatusFont.lfFaceName = fontname & vbNullChar
ret = SystemParametersInfo(SPI_SETNONCLIENTMETRICS, Len(m_nonClientMetrics), m_nonClientMetrics, 0)
m_logFont.lfFaceName = fontname & vbNullChar
ret = SystemParametersInfo(SPI_SETICONTITLELOGFONT, Len(m_logFont), m_logFont, 0)
End Sub
' Phục hồi sơ đồ font cũ của Windows
Private Sub RestoreSysFont()
m_nonClientMetrics.lfCaptionFont.lfFaceName = m_fontCaption
m_nonClientMetrics.lfSmCaptionFont.lfFaceName = m_fontSmCaption
m_nonClientMetrics.lfMenuFont.lfFaceName = m_fontMenu
m_nonClientMetrics.lfMessageFont.lfFaceName = m_fontMessage
m_nonClientMetrics.lfStatusFont.lfFaceName = m_fontStatus
ret = SystemParametersInfo(SPI_SETNONCLIENTMETRICS, Len(m_nonClientMetrics), m_nonClientMetrics, 0)
m_logFont.lfFaceName = m_fontIcon
ret = SystemParametersInfo(SPI_SETICONTITLELOGFONT, Len(m_logFont), m_logFont, 0)
End Sub
'Hàm khởi động form ứng dụng
Private Sub Form_Load()
SetSysFont ("VnTimes")
End Sub
Hàm được gọi khi form bị xóa
Private Sub Form_Unload(Cancel As Integer)
RestoreSysFont
End Sub
' Thủ tục xử lý ấn button Command0
Private Sub Command0_Click()
MsgBox ("Dòng tiếng Việt thử")
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
If (KeyAscii < &H30) Or (KeyAscii > &H39) Then
KeyAscii = 0 ' Bỏ ký tự không phải là số
End If
End Sub
////////////////////////////////////////////
Hôm nay mình đọc và đã làm thành công 1 bài tập nữa ,sẽ post lên cho anh em cùng bàn và tham khảo. Mình chỉ làm thành công với .VNTime
còn Times new roman thì chưa thành công? không biết làm sao? híc.
Mình tự hỏi ,có thể chỉ cần tạo 1 form tiếng việt,khi bật lên thì sẽ nối với tất cả các form khác không? làm kiểu này lại phải copy tới các form khác để hiển thị tiếng việt sao?
Mong anh em góp ý!!!
http://www.box.net/shared/ozbmtvpsqv
Tb: có cách nào hiển thị chỉnh sửa cỡ chữ trong MsgBox không?
-----------------------------------------------------------------------------------------
ngoài ra ta có thể chỉnh như sau:
TG:võ hùng- PC world
Trong Access 2K trở lên chạy trên Windows XP/2K, không cần phải thay thế font hệ thống bằng các font TCVN, VNI, Vietware..., bạn vẫn có thể sử dụng font Unicode tiếng Việt trong các thành phần từ khi lập trình cho đến khi sử dụng: ô nhập liệu, tiêu đề trên form, menu, toolbar... Quan trọng nhất, bạn có thể viết code sử dụng font Unicode để tạo các message box hiển thị tiếng Việt. Điểm mấu chốt là khi tạo các form, report, menubar, toolbar, bạn sử dụng font Unicode dựng sẵn, nhưng khi lập trình (viết code) bạn dùng font Unicode tổ hợp. Lưu ý: khi viết code nhớ chọn font có chữ Vietnamese ở đằng sau, ví dụ font Times New Roman (Vietnamese).
Cài đặt hệ điều hành 2K/XP
Vào Control panel->Regional and Language Options. Trong bảng này có 3 tab:
+ Tab Regional options (gọi là Tab 1)
+ Tab Languages (gọi là Tab 2)
+ Tab Advanced (gọi là Tab 3)
- Đầu tiên bạn vào Tab 2, đánh dấu chọn "Install files for complex script and right-to-left languages (including Thai)" (nếu chưa chọn). Có thể chương trình yêu cầu bạn đưa vào đĩa cài đặt WinXP(2K). Lưu ý: không nên dùng các đĩa cài đặt XP đã được chỉnh sửa như Wesmosiss WinXP,...
- Chọn OK và khởi động lại máy.
- Vào lại Tab 1, chọn Vietnamese.
- Vào Tab 3, chọn Vietnamese.
- Chọn OK và khởi động lại máy.
Cài đặt MS Office
Sau khi đã cài đặt MS Office, bạn vào Start -> Programs -> Microsoft Office Tools -> Microsoft Office Language Settings, chọn ngôn ngữ mặc định là Vietname.
Tôi chưa làm vì CD_rom bị hỏng,bạn nào làm rồi cho ý kiến nhỉ?
Cách nào tốt và các biện pháp khắc phục để khi chương trình cầm đến 1 máy khác hoạt động không bị lỗi phông chữ??? và tiện cho người sử dụng nhất?View more random threads:
- Mỗi ngày thêm 1 code hay
- Thêm item mới vào combobox Access
- xuất table access sang nhiều sheet excell
- Sao lưu table từ file -> file?
- Cho mình hỏi về hàm Sleep với !
- Giúp mình bắt lỗi khi người dùng nhấn Alt + F4
- Kết nối SQL server với Access
- Cách tính tỷ lệ giảm trừ % trong 1 danh sách có nhiều người
- cần giúp đở gấp ( liên kết 2 máy trong mạng LAN)
- Xin giúp em về listview
-
01-19-2009, 04:56 AM #2Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 0
Ðề: Hiển thị Tiếng việt tại các MsgBox
Theo tôi nên sử dụng unicode.
Đa số máy ở VN đều có cài đặt unicode. Đa số máy ở Mỹ thì không có cài.
Ngoài ra không nên can thiệp quá sâu vào hệ thống.
Ví dụ khi dùng Access thì những chỗ nào có thể gõ unicode thì nó đều thể hiện được: title bar, status bar, controlTip, label, text box ...
Một đôi khi nên dùng tiếng Anh nếu như chưa có chữ Việt phù hợp để dịch.
Chẳng hạn nên dùng các từ File, Field, Save, internet ... thay vì dùng Tệp, Trường, Lưu ... hà... ở đây quả thực chữ internet không nên dịch sang tiếng Việt.
-----
Như cách bạn hướng dẫn khai báo trong Control Panel ở trên thì cần làm khi cài đặt Window hoặc là khi khai báo cần nối mạng internet.
Khi đó máy sẽ được cài font unicode và sau đó ta cứ dùng thôi.
Bạn cũng nhớ hồi năm nào MS có thiết kế bản Win95 Việt hóa, nhưng rõ ràng dự án đó đã phá sản.
Người Việt nên có tối thiểu bằng A tiếng Anh, thay vì cố chèn tiếng Việt vào phần mềm của Microsoft.
-
01-22-2009, 04:47 PM #3Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 0
Ðề: Hiển thị Tiếng việt tại các MsgBox
THEO NHƯ BÁC MUONTENNGUOI GỢI Ý VÀ NÊU MÌNH THỰC HIỆN LUÔN CẢ Ã CÁCH THẤY :
- cách đầu thì có nhược điểm: khi đang sử dụng access do đã chuyển lại hệ thống font của win thì các hệ thống mà mình sử dụng khác ngoài access bị lỗi font.
- cách sau: do cài lại hệ thống font nên Dãy phím số trên bàn phím toàn ra: ă â ê ô ̀ ̉ ̃ ́ ̣ đ - ₫ \ , xử lý ntn nhỉ?
Bên cụm numlock thì vẫn ra 123456789 ,,,,, đều đều, nhưng dãy phím số bên trên các ký tự q, w, e, r, t, y, u, thì nó lại ra thế kia, mấy dấu móc, hoa thị, a còng không hiện ra được.
cách này thuận tiện cho người lập trình không phải chuyển đổi lại thành vntimes và lập trình nhanh hơn rất nhiều.
Xin hỏi: có cách nào khắc phục lỗi trên? tìm ở google mãi chưa thấy? anh em nào từng bị và từng sử lý như nào nhỉ? Mong chỉ giáo?
-----------------------------------------------------------------------------------------
Đó là do Windows thự thiết lập chế độ gõ Tiếng Việt cho máy tính, bạn phải tắt nó đi bằng cách sau:
- Vào Control Panel > Regional and Language Options > Thẻ Languages > Bấm nút Details > Thẻ Settings > Tại Default input language, bạn chọn English (United States) - US là xong!
Khi cài đặt lần đầu tiên và khởi động lại thì mọi thứ đều có vẻ như rất ok,nhưng khi khởi động lại từ lần 2 trở đi Windows sẽ tự thiết lập hệ thống tiếng việt cho máy và mặc định luôn..... híc vì vậy các bộ số 1,2...9 khi gõ đều không đúng và có tình trạng trên?? Không biết làm kiểu gì?
-----------------------------------------------------------------------------------------
Cách số 1 ngoài tình trạng bị lỗi font thì còn một lỗi nữa là:
Đổi font Hệ thống không làm "nứt" các icon ở Traysystem
nghĩa là :
Bình thường khi dùng các hàm API để đổi font của hệ thống thành font của mình thì các biệu tượng phía dưới Traysystem sẽ bị co giãn kích thước làm cho các biểu tượng không thể hiện thị đúng kích thước ban đầu. Đoạn chương trình này sẽ khắc phục được nhược điểm trên
mình sưu tầm được cách khắc phục sau:
http://caulacbovb.com/forum/download/file.php?id=753
nhưng còn cái lỗi kia chưa tìm thấy,khi nào tìm thấy sẽ mách anh em,khò khò.. cái gì cũng có ưu và nhược nhỉ? nếu tìm được cách khắc phục các nhược điểm thì ta chọn phải không? Mong anh em góp sức nha:chay:
-
01-22-2009, 07:22 PM #4Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 0
Ðề: Hiển thị Tiếng việt tại các MsgBox
Thấy quý vị râm ran cái vụ hiển thị chữ có dấu tiếng Việt ở MsgBox quá, tôi bèn tham gia một chút xíu. Bảo đảm hiện chữ có dấu tiếng Việt hẳn hoi. Xài unicode nghen.
Quý vị chịu khó làm một cái table sau:
Name: tblMessages
Fields: messID (Text, 50), messContent (Text, 255)
messID: chứa một chuỗi để xác định nội dung thông báo, ví dụ: TRUNG_MASO
messContent: chứa nội dung thông báo, ví dụ: Mã số đã bị trùng, vui lòng nhập lại mã số khác.
Làm một cái sub hay function gì đó. Ở đây là sub ví dụ:
Public Sub ThongBao (messID As String)
Dim noidung
noidung = DLookup("messContent", "tblMessages", "messID = '" & messID & "'")
If IsNull(noidung) Then
MsgBox "This error is not recorded."
Else
MsgBox noidung
End If
End Sub
Ở đâu đó cần hiện thông báo thì gọi sub:
ThongBao TRUNG_MASO
Vậy là nhẹ nhàng, khỏi cần Windows API chi cho cực khổ.
-
01-26-2009, 01:19 AM #5Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 0
Ðề: Hiển thị Tiếng việt tại các MsgBox
Gửi bởi phatnq2002
1. Thay messID thành kiểu number hoặc
2. goi thong bao phải cho trong ngoặc kép: thongbao "trung_maso"
-
08-21-2009, 09:25 PM #6Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 0
Ðề: Hiển thị Tiếng việt tại các MsgBox
Gửi bởi phatnq2002
-
08-21-2009, 10:18 PM #7Junior Member
- Ngày tham gia
- Nov 2015
- Bài viết
- 3
Ðề: Hiển thị Tiếng việt tại các MsgBox
Gửi bởi vuthuanbkvn
-
08-26-2009, 08:58 PM #8Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 0
Ðề: Hiển thị Tiếng việt tại các MsgBox
Mình có 1 chương trình demo msgbox dùng Unicode tiếng Việt.
Mời bạn tham khảo
http://www.khoahocphothong.net/foru...8901-msgbox-dung-unicode-tieng-viet-msgtv.rar
-
08-27-2009, 03:59 AM #9Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 0
Ðề: Hiển thị Tiếng việt tại các MsgBox
Mình cũng có 1 msgbox hiển thị unicode nhe, nhưng cách gõ trong access hơi đặc biệt tí, vì trong code kô gõ đc unicode, nên mình giả lập
Ví dụ: Ho^m nay la` nga`y dde.p tro+`i -> Hôm nay là ngày đẹp trời
Để mình tìm lại và post lên nhe
Khu dự án cao cấp Moonlight Avenue được phát triển bởi Tập đoàn Hưng Thịnh phù hợp khách hàng đẳng cấp nhất tiện ích phù hợp. Moonlight Thủ Đức phù hợp khách hàng khu an ninh phong cách nghỉ dưỡng....
Moonlight Avenue Dự án chung cư không gian thoáng mát thoải mái nhất