Listview unicode

Liên hệ QC

nguyendangkhoi

Thành viên chính thức
Tham gia
18/2/09
Bài viết
59
Được thích
5
Em có lang thang trên mạng thì có gặp một bài cọđaon code nói về LV unicode mà em không hiểu và thấy nó cũng không chạy được, hôm nay em đưa lên thử để mọi người tham khảo xem có cách nào chạy được nó không ?;;;;;;;;;;;

PHP:
Private Const WM_SETTEXT = &HC
Private Const GWL_WNDPROC = (-4)
Public Const LVM_SETITEMTEXT = (&H1000 + 116)

PHP:
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcW" _
(ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, _
ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

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 SetWindowLong Lib "user32" Alias "SetWindowLongW" _
(ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public PrevProc As Long
PHP:
Public Function WindowProc(ByVal hwnd As Long, _
ByVal uMsg As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long

On Error Resume Next
Dim sTemp As String

If uMsg = LVM_SETITEMTEXT Then
        sTemp = StrConv("Subclassing" & Chr(0), vbFromUnicode)
        lParam = StrPtr(sTemp)
        WindowProc = DefWindowProc(hwnd, uMsg, 0, lParam)
Else
        WindowProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam)
End If
End Function

PHP:
Public Sub initForm()
On Error Resume Next

Dim i As Integer
 
PrevProc = SetWindowLong(Form.lsv.hwnd, WM_SETTEXT, AddressOf WindowProc)

Form.lsv.View = lvwReport
With Form.lsv.ColumnHeaders
    .Clear 
    .Add 1, , ChrW(&H95C9)
End With

Form.lsv.ListItems.Clear

For i = 1 To 5
    unicodechar = ChrW(&H9000)

    With Form.lsv
           .ListItems.Add i, , unicodechar
           .ListItems(i).SubItems(2) = unicodechar
    End With
Next
End Sub

PHP:
Public Sub SubclassForm(L As ListView)
    PrevProc = SetWindowLong(L.hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub

PHP:
Public Sub UnSubclassForm(L As ListView)
    SetWindowLong L.hwnd, GWL_WNDPROC, PrevProc
End Sub
PHP:
Private Sub UserForm_Terminate()
    UnSubclassForm lsv
End Sub
 
Chỉnh sửa lần cuối bởi điều hành viên:
Ví dụ bạn đưa ra là dùng trong VB.

Lê Văn Duyệt
 
Upvote 0
Tôi thấy cái "Microsoft Listview Control 6.0(SP6)" có thể hiển thị được Unicode tổ hợp. Unicode dựng sẵn vẫn bị lỗi 1 số chữ.
Bạn vào mục Font và chọn những font Unicode như Tahoma, Times New Roman... và chọn Script là Vietnamese
 
Upvote 0
Web KT

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

Back
Top Bottom