Chào mừng đến với Diễn đàn Dân Kế Toán - Kế toán tổng hợp thực tế.
Kết quả 1 đến 9 của 9
  1. #1
    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?

  2. #2
    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.

  3. #3
    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:

  4. #4
    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ổ.

  5. #5
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Hiển thị Tiếng việt tại các MsgBox




    Trích dẫn Gửi bởi phatnq2002
    Name: tblMessages
    Fields: messID (Text, 50), messContent (Text, 255)



    Ở đâu đó cần hiện thông báo thì gọi sub:

    ThongBao TRUNG_MASO
    Mạo muội thêm 1 chút đại ca nhé, Có 1 trong 2 chỗ cần chỉnh thì mới không báo lỗi.
    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"

  6. #6
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Hiển thị Tiếng việt tại các MsgBox




    Trích dẫn Gửi bởi phatnq2002
    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ổ.
    Mìng đã làm theo hwowsng dẫn của bác nhwng khi chạy vẫn không hiển thị được chữ Việt

  7. #7
    Ngày tham gia
    Nov 2015
    Bài viết
    3
    Ðề: Hiển thị Tiếng việt tại các MsgBox




    Trích dẫn Gửi bởi vuthuanbkvn
    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?
    -----------------------------------------------------------------------------------------
    Tôi vẫn sử dụng cách này, mới đầu cũng thấy rất phiền. tuy nhiên sẽ không phiền nữa nếu bạn để Unikey chạy thường trực trên Windows. Khi đó các phím số như bạn nói vẫn thể hiện 1,2,3,4... và !, @, #.. như bình thường, và tất nhiên nếu bạn muốn dùng Unicode thì phải dùng bảng mã Unicode tổ hợp mới không gặp lỗi trên VBE.

  8. #8
    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

  9. #9
    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

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •