Tiếng Việt cho UserForm

Liên hệ QC

xuanhoa7604

Thành viên hoạt động
Tham gia
9/6/08
Bài viết
169
Được thích
82
Nghề nghiệp
Giáo viên
Mình muốn sử dụng UserForm để nhập liệu. Mình muốn có tiếng Việt có dấu trong phần tiêu để thì mình phải làm thế nào? Xin các bác chỉ giúp. Cảm ơn nhiều!
 
Bạn gõ nội dung trực tiếp trên đối tượng, đừng gõ trên cửa sổ thuộc tính Properties.
 
Upvote 0
Bạn gõ nội dung trực tiếp trên đối tượng, đừng gõ trên cửa sổ thuộc tính Properties.

Cái này không được đâu anh ơi. Có lẽ ý của bạn ấy là nhập Tiếng Việt trên Captain của Userform đó anh. Bạn tham khảo thêm ở Topic này nha. Suy cho cùng vẫn chưa có giải pháp nào tối ưu. Vẫn phải nhờ sự hỗ trợ của VB6
http://www.giaiphapexcel.com/forum/showthread.php?t=16802
 
Upvote 0
Nếu là cation của UserForm kể cả VB6 cũng đang bó chân.com. Muốn hiện được thì dùng đủ mánh khóe, mệt cả người.
 
Upvote 0
Mình cũng thấy phức tạp thật. Thôi có lẽ mình để tiếng Việt không dấu cho ổn. Dù sao thì vẫn đọc được mà.
 
Upvote 0
các bác gõ theo bảng mã "vietnamese locale PC1258" hiển thị tiếng việt rất tốt
 
Upvote 0
Đề tài này được nói nhiều lần và nhiều nơi rồi nhưng xem ra vẫn còn chưa được thông lắm.
Tôi thì chỉ cần làm đơn giản như sau:
Cài đặt win có đầy đủ phần ngôn ngữ bản địa Việt Nam. Khi thiết kế thì dùng Unicode tổ hợp thế là xong chuyện vì MsForm 2.0 đã hỗ trợ rất tốt Unicode rồi.
 
Upvote 0
Cài đặt win có đầy đủ phần ngôn ngữ bản địa Việt Nam. Khi thiết kế thì dùng Unicode tổ hợp thế là xong chuyện vì MsForm 2.0 đã hỗ trợ rất tốt Unicode rồi.

Đấy là máy của mình thì mới làm thế được. Máy của 1000 người khác thì mình ko có quyền làm cái gì cả ngoài việc duy nhất là cài PM của mình lên. Các bạn nghĩ đơn giản quá chứ bọn tớ dân phục vụ KH trong đầu luôn nghĩ làm sao chạy độc lập trên mọi môi trường mà chạy đúng mới khổ. Ví dụ cái vụ form title đó, nếu là form thường thì ko có gì khó lắm, nhưng nếu là Mdi form có dạng Main title [child1 title] mà cái trong ngoặc vuông đó nó hiện từ child form lên, đến mệt.

Mới gần đây, đến khổ cái chuyện tiếng Việt trên windows XP chọn language là tiếng nhật, tới giờ này tớ vẫn bó tay.

Ngán cái nghề làm dâu trăm họ, phục vụ thượng đế lắm rồi.

P/S: Làm cái label thay cái title là mẹo cũ lắm rồi và ko chuẩn tắc. Nếu làm vài cái chơi chơi thì có thể làm theo cách đó được.
 
Upvote 0
Đọc mấy dòng tâm sự của hai2hai thì thấy thông cảm thật.
Tôi thì không phải người làm IT chuyên nghiệp nên có nhiều cái cũng chẳng hiểu lắm, nhưng chỉ có 1 lý lẽ rất đơn giản là tại sao người VN mà lại không dùng chuẩn VN khi mà đã được lão Bill bản địa hóa cho rồi. Ngay cả khi cài cái language VN vào thì cũng không hề ảnh hưởng gì đến hệ thống (Hệ thống vẫn có thể thiết lập sang các tiêu chuẩn của nước khác được)
Còn việc cài đặt win, tôi thấy 100% các máy tính ở chỗ tôi khi nhận về đều được các kỹ sư (hay dối sư) tin học của nơi cung cấp chỉ cài đặt ở chế độ mặc định (EN), còn người dùng thì chỉ biết dùng thôi, ít khi tìm hiểu xem tại sao nó lại thế này thế kia một phần do không có kiến thức, một phần do tính ỉ lại trông chờ, một phần do tính ích kỷ cá nhân (tao mất tiền mua thì mày phải làm cho tao dùng được)... Tôi cũng hay làm 1 số thứ cho anh em trong cơ quan cùng dùng nhưng tôi chỉ làm theo đúng tiêu chuẩn rồi viết thêm 1 đoạn hướng dẫn, ai muốn dùng thì phải chấp nhận học hỏi và thay đổi, đành rằng làm dâu trăm họ thật đấy nhưng đâu phải cứ làm dâu là phải chịu ấm ức mãi.
Rồi việc sử dụng bảng mã nữa, kể cũng là lạ, trước kia chưa có UnicodeVN thì chúng ta mới phải xây dựng các font chữ theo những tiêu chuẩn riêng như các bộ font ABC, VNI, Vietware... bây giờ có UnicodeVN rồi sao mọi người không chịu chuyển đổi, ngay cả một số văn bản của các bộ ngành trung ương khi đưa lên web cho dân đen download về cũng thế, dùng bảng mã lung tung xì ngậu, down về lại phải chuyển đổi, có cái văn bản chứa đến 2, 3 loại bảng mã khác nhau, lúc chuyển đổi cũng gặp nhiều khó khăn, chán thật.
Hì, tâm sự cùng bạn chút xíu và xin chia xẻ nỗi khổ tâm của bạn.
 
Upvote 0
Theo kinh nghiệm của mình thì dùng đoạn code sau để hiển thị form unicode trên tiêu đề của userform.
Đoạn code sau sẽ làm điều đó. Với ĐK là máy của bạn phải có font VK Sans Serif và cài Vietkey2000, mình thử trên nhiều máy, nó chỉ chạy khi có font đó và vietkey2000 còn Unikey thì không được.

Module:
Mã:
Public Const LF_FACESIZE = 32
Public Type LOGFONT '60 byte
    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(LF_FACESIZE) As Byte
End Type
Public Type NMLOGFONT '56 byte
    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(LF_FACESIZE - 4) As Byte
End Type
Public Type NONCLIENTMETRICS
    cbSize As Long
    iBorderWidth As Long
    iScrollWidth As Long
    iScrollHeight As Long
    iCaptionWidth As Long
    iCaptionHeight As Long
    lfCaptionFont As NMLOGFONT
    iSMCaptionWidth As Long
    iSMCaptionHeight As Long
    lfSMCaptionFont As NMLOGFONT
    iMenuWidth As Long
    iMenuHeight As Long
    lfMenuFont As NMLOGFONT
    lfStatusFont As NMLOGFONT
    lfMessageFont As NMLOGFONT
End Type
Public Const REG_STRUCTURESIZE = 340 'Size of NONCLIENTMETRICS
Public Const SPI_SETNONCLIENTMETRICS = 42
Public Const SPI_GETNONCLIENTMETRICS = 41
Public Declare Function SystemParametersInfo Lib "user32" _
        Alias "SystemParametersInfoA" (ByVal uAction As Long, _
        ByVal uParam As Long, lpvParam As Any, _
        ByVal fuWinIni As Long) As Long
Public newFontMetric As NONCLIENTMETRICS
Public oldFontMetric As NONCLIENTMETRICS
Public Sub ConvertFontToByte(ByRef lfFont As NMLOGFONT, ByRef fFontName As String)
 
    Dim i As Byte
 
    For i = 1 To Len(fFontName)
        lfFont.lfFaceName(i - 1) = Asc(Mid(fFontName, i, 1))
    Next
 
    For i = Len(fFontName) To (LF_FACESIZE - 4)
        lfFont.lfFaceName(i) = 0
    Next
 
End Sub
Public Sub SetFont(ByVal newFontName As String)
 
    newFontName = IIf(IsNull(newFontName), "VK Sans Serif", newFontName)
 
    Dim VarGT As Long
    oldFontMetric.cbSize = REG_STRUCTURESIZE
    VarGT = SystemParametersInfo(SPI_GETNONCLIENTMETRICS, REG_STRUCTURESIZE, oldFontMetric, 0)
 
    newFontMetric.cbSize = REG_STRUCTURESIZE
    newFontMetric.iCaptionWidth = 30
    newFontMetric.lfCaptionFont.lfHeight = -13
    newFontMetric.lfCaptionFont.lfWeight = 700
 
    Call ConvertFontToByte(newFontMetric.lfCaptionFont, newFontName)
    Call ConvertFontToByte(newFontMetric.lfMenuFont, newFontName)
    Call ConvertFontToByte(newFontMetric.lfMessageFont, newFontName)
    Call ConvertFontToByte(newFontMetric.lfSMCaptionFont, newFontName)
    Call ConvertFontToByte(newFontMetric.lfStatusFont, newFontName)
 
    VarGT = SystemParametersInfo(SPI_SETNONCLIENTMETRICS, REG_STRUCTURESIZE, newFontMetric, 0)
 
End Sub
Public Sub RestoreFont()
    Dim VarGT As Long
    oldFontMetric.cbSize = REG_STRUCTURESIZE
    VarGT = SystemParametersInfo(SPI_SETNONCLIENTMETRICS, REG_STRUCTURESIZE, oldFontMetric, 0)
End Sub
Code của Userform:
Mã:
Private Sub UserForm_Deactivate()
  Call RestoreFont
End Sub
Private Sub UserForm_Initialize()
Call SetFont("VK Sans Serif")
End Sub
 

File đính kèm

Upvote 0
để hiển thị form unicode trên tiêu đề của userform.
Đoạn code sau sẽ làm điều đó. Với ĐK là máy của bạn phải có font VK Sans Serif

Bạn viết gì mà mâu thuẫn thế ko biết. Đã là Unicode thì cần gì font "VK Sans Serif" (TCVN3).

Có vẻ như còn rất người vẫn chưa có kiến thức về font, bảng mã,... mà mình đã từng giới thiệu nhiều lần tới phát chán rồi.

Private Sub UserForm_Deactivate()
Call RestoreFont
End Sub
Private Sub UserForm_Initialize()
Call SetFont("VK Sans Serif")
End Sub

Đây là cách không nên dùng vì ko chuẩn tắc trong lập trình (đối với tớ). Ngoài ra, form liệu có Deactivate hay ko nếu ta dùng Kill Process?

Unicode Title (for single form) thì đơn giản lắm. Sao lại phải làm thế.
 
Lần chỉnh sửa cuối:
Upvote 0
....nhưng chỉ có 1 lý lẽ rất đơn giản là tại sao người VN mà lại không dùng chuẩn VN khi mà đã được lão Bill bản địa hóa cho rồi. Ngay cả khi cài cái language VN vào thì cũng không hề ảnh hưởng gì đến hệ thống (Hệ thống vẫn có thể thiết lập sang các tiêu chuẩn của nước khác được)....

Làm cái nghề phần mềm là viết 1 ứng dụng cỡ độ cho doanh nghiệp lớn sài cũng được, nhưng người sử dụng là 1 cô chả biết gì về máy tính, chỉ biết nhắm mắt download về và cài đặt lên là phải chạy. Chứ lấy đâu ra người biết vào Control Panel, chọn Regional & Language Settings gì đó,....

Nếu ko làm thế thì có cả hàng ngàn cuộc điện thoại gọi đến chỉ để hỏi "Tại sao ko lên font chữ..." (như cái HTKK Thuế đó), "Tại sao ko kết nối CSDL được", v.v....

Nó mệt là mệt ở cái chỗ mình đưa advance techniques vào để thỏa mãn những low requests ==> Nhằm giảm chi phí hỗ trợ (thời gian trả lời ĐT, email cho những câu hỏi đó là vô cùng lớn mà chưa chắc đã tạo ra ngay giá trị)
 
Lần chỉnh sửa cuối:
Upvote 0
...chỉ biết nhắm mắt download về và cài đặt lên là phải chạy....
.....
Nếu ko làm thế thì có cả hàng ngàn cuộc điện thoại gọi đến chỉ để hỏi "Tại sao ko lên font chữ..." (như cái HTKK Thuế đó), "Tại sao ko kết nối CSDL được", v.v....
Khoái thật, ai bảo nổi tiếng và nhiều money cơ chứ.
Tôi thì khác, chẳng lợi lộc gì mấy vụ này nên cũng phải nhọc công lắm.
Trong file hướng dẫn ghi rõ: "Đọc kỹ hướng dẫn trước khi dùng, nếu đọc kỹ rồi mà vẫn không dùng được thì đừng dùng nữa vì tác giả cũng không giải quyết được..."
Nói vui vậy thôi, rất hiểu bạn trong bối cảnh chung bây giờ.
 
Upvote 0
Web KT

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

Back
Top Bottom