VicoTas
Câu hỏi
MrTien ftienhts
26/04/2013 21:49

Xin hướng dẫn lập trình Access tự động hiển thị mã tiếng Việt trong hàm MsgBox?

Xin hướng dẫn lập trình Access tự động hiển thị mã tiếng Việt trong hàm MsgBox để khi đem sang máy khác không phải vào Control Panel.Display.Properties.Appearance chỉnh lại.

Danh sách câu trả lời (2)
Phương pebuon_8x 26/04/2013 21:49
Trích dẫn:
Từ bài viết của iuem
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

-------------------------------------
Toi da lam nhu huong dan nhung khi chay ct thi bao loi. Toi nghi can khai bao thu vien trong phan Tools\ References...
Nhung khong biet check vao muc nao cho dung. Ai biet chi dum.
Cam on
Lê Thị Hoa Hồng hoahong 26/04/2013 21:49
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
Trả lời câu hỏi
Tải lại mã
Câu hỏi lĩnh vực Lập trình
Manh Linh Cách thiết kế lịch năm mới 2010 trực tuyến ?

Đăng lúc: 21:49 - 26/04/2013 trong Lập trình

Hoài Nam (Nam Tước) Cách tạo và sử dụng Cookie với ngôn ngữ ASP ?

Đăng lúc: 21:48 - 26/04/2013 trong Lập trình

Vinh Giúp em tạo hiệu ứng cho các button trong VB.NET nha...

Đăng lúc: 21:48 - 26/04/2013 trong Lập trình

Lê Thị Hoa Hồng Về môn mạng máy tính: Hỏi cách thay đổi cách đăng nhập và thoát ?

Đăng lúc: 21:48 - 26/04/2013 trong Lập trình

Chip chip HỎI VỀ TỰ ĐỘNG CẬP NHẬT DỮ LIỆU TRONG EXCEL

Đăng lúc: 21:48 - 26/04/2013 trong Lập trình

Hin Tìm phần mềm cài đặt máy CanoScan LiDE 20 F9 15800?

Đăng lúc: 21:48 - 26/04/2013 trong Lập trình

Thu Trang Có ai bít thành thạo về vbaccess ko giúp minh với ?

Đăng lúc: 21:48 - 26/04/2013 trong Lập trình

nophoto Xin hướng dẫn bài lập trình C ?

Đăng lúc: 21:48 - 26/04/2013 trong Lập trình

vietnamconnection Lập trình photoshop hay coreldraw bằng gì?

Đăng lúc: 21:48 - 26/04/2013 trong Lập trình

Củ Chuối Lập trình JAVA kết nối với db ?

Đăng lúc: 21:48 - 26/04/2013 trong Lập trình

Ngô Minh Tùng Chuyển file viết bằng PASCAL sang file .exe?

Đăng lúc: 21:48 - 26/04/2013 trong Lập trình

Xuân Trọng Tạo liên kết trên File Flash ?

Đăng lúc: 21:48 - 26/04/2013 trong Lập trình

MrTien Tạo file .BAT tự động copy trong LAN ?

Đăng lúc: 21:47 - 26/04/2013 trong Lập trình

Link Trong C# chuyển dữ liệu từ Foxpro sang sql server như thế nào?

Đăng lúc: 21:47 - 26/04/2013 trong Lập trình

lighting Hiển thị CSDL ngẫu nhiên VB6 ?

Đăng lúc: 21:47 - 26/04/2013 trong Lập trình

Hin Kết xuất và nhận dữ liệu ?

Đăng lúc: 21:47 - 26/04/2013 trong Lập trình

Hương Bắt lỗi khi nhập hòm thư trong ô textbox không đúng trong VB.NET ?

Đăng lúc: 21:47 - 26/04/2013 trong Lập trình

Củ Chuối Đọc file Assembly ?

Đăng lúc: 21:47 - 26/04/2013 trong Lập trình

Thu Trang Đọc file bằng ngôn ngữ C ?

Đăng lúc: 21:47 - 26/04/2013 trong Lập trình

nophoto Mô hình 3 lớp là gì? Các bước tạo và Ứng dụng trong ASP.NET - C# thế nào?

Đăng lúc: 21:47 - 26/04/2013 trong Lập trình

Rao vặt Siêu Vip