Tạo chữ unicode của caption trên Userform

Liên hệ QC

Nguyễn Duy Tuân

Nghị Hách
Thành viên danh dự
Tham gia
13/6/06
Bài viết
4,776
Được thích
10,289
Giới tính
Nam
Nghề nghiệp
Giáo viên, CEO tại Bluesofts
unicodecaption.jpg

Thông thường chúng ta không thể viết chữ có dấu/unicode trên caption của userform. Một phương pháp tôi muốn giới thiệu các bạn là dùng hàm API DefWindowProcW của Windows để làm được việc này rất đơn giản. Phương pháp như sau:
Bước 1: Bạn hãy tạo hoặc mở userform trong VBA
Bước 2: Copy đoạn code dưới đây và dán vào của sổ code của userform. Đoạn code này giả định chuỗi hiển thị trên caption của form nằm ở ô A1 trong bảng tính vì vậy bạn hãy nhập chuỗi có dấu tại địa chỉ này.
Toàn bộ đoạn code dưới dưới đây:

[GPECODE=vb]
'Author: Nguyễn Duy Tuân - Công ty CP BLUESOFTS
'Website: http://bluesofts.net
Option Explicit
Private Const WM_SETTEXT = &HC
Private Declare Function DefWindowProc Lib "user32" Alias "DefWindowProcW" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Sub UserForm_Initialize()
Dim hWnd&, sUnicode$
hWnd = FindWindow("ThunderDFrame", Caption) ' Tim HWnd cua UserForm
sUnicode = Range("A1").Value 'Noi chua chuoi unicode
DefWindowProc hWnd, WM_SETTEXT, 0, StrPtr(sUnicode)
End Sub
[/GPECODE]

DOWNLOAD
 
Lần chỉnh sửa cuối:
Thông thường chúng ta không thể viết chữ có dấu/unicode trên caption của userform. Một phương pháp tôi muốn giới thiệu các bạn là dùng hàm API DefWindowProcW của Windows để làm được việc này rất đơn giản. Phương pháp như sau:
Bước 1: Bạn hãy tạo hoặc mở userform trong VBA
Bước 2: Copy đoạn code dưới đây và dán vào của sổ code của userform. Đoạn code này giả định chuỗi hiển thị trên caption của form nằm ở ô A1 trong bảng tính vì vậy bạn hãy nhập chuỗi có dấu tại địa chỉ này.
Toàn bộ đoạn code dưới dưới đây:

[GPECODE=vb]
'Author: Nguyễn Duy Tuân - Công ty CP BLUESOFTS
'Website: http://bluesofts.net
Option Explicit
Private Const WM_SETTEXT = &HC
Private Declare Function DefWindowProc Lib "user32" Alias "DefWindowProcW" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Sub UserForm_Initialize()
Dim hWnd&, sUnicode$
hWnd = FindWindow("ThunderDFrame", Caption) ' Tim HWnd cua UserForm
sUnicode = Range("A1").Value 'Noi chua chuoi unicode
DefWindowProc hWnd, WM_SETTEXT, 0, StrPtr(sUnicode)
End Sub
[/GPECODE]
DOWNLOAD
Em test sao không được như anh nhỉ
Test1.JPG
 
Upvote 0

File đính kèm

  • Caption.jpg
    Caption.jpg
    7.3 KB · Đọc: 157
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
Upvote 0
Trong Windows XP, font trên caption ngầm định không phải unicode nên bạn cần vào Control Panel chỉnh lại về font như: Tahoma, Viranda, Times New Roman

Thật ra code này tôi cũng có biết lâu rồi nhưng gặp vấn đề đối với Windows XP nên.. thôi không dùng
- Việc điều chỉnh font hệ thống không phải ai cũng biết và cho dù biết thì không phải ai cũng.. thích làm (riêng tôi chẳng thích tí nào việc này)
- Giá như có code nào đó phục vụ được cho mọi version office + windows thì... ngon lành hơn
- Nếu vấn đề trở nên quá rắc rối, tôi thà dùng 1 Label giả lập Title rồi viết thoải mái tiếng Việt lên đó
 
Upvote 0
Thật ra code này tôi cũng có biết lâu rồi nhưng gặp vấn đề đối với Windows XP nên.. thôi không dùng
- Việc điều chỉnh font hệ thống không phải ai cũng biết và cho dù biết thì không phải ai cũng.. thích làm (riêng tôi chẳng thích tí nào việc này)
- Giá như có code nào đó phục vụ được cho mọi version office + windows thì... ngon lành hơn
- Nếu vấn đề trở nên quá rắc rối, tôi thà dùng 1 Label giả lập Title rồi viết thoải mái tiếng Việt lên đó

Windows XP là phải chấp nhận thôi. Chỉ là font của nó không đúng với ông VN :). Tất cả các phần mềm chạy trên Windows XP đều bị vậy với font trên title. Cũng không nên vì thế mà mất thời gian viết giả lập cho khổ anh à. Bây giờ dân tình dùng Windows mới đều dùng font chuẩn rồi. Vì form giả lập mang sang máy Windows khác nó không ăn theo theme nên cùi lắm. Viết ứng dụng đâu có dùng một form, còn nhiều form nữa chứ.

Các bạn muốn tham khảo thêm về các giải pháp unicode cho MsgBox, Menu trong Userform thì tham khảo bài viết tại đây (giờ là đồ cổ) :
http://www.giaiphapexcel.com/forum/...-Unicode-Menu-trong-Userform-UMU-(SourceCode)
 
Lần chỉnh sửa cuối:
Upvote 0
mình đã làm được nhưng muốn làm đậm cái caption đó hoặc cho nó zise lớn mà không biết phải làm sao. cách bạn chỉ mình với. xin chân thành cảm ơn
 
Upvote 0
Web KT

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

Back
Top Bottom