Tô màu chữ trong List Box

Liên hệ QC

AnhThu-1976

Thành viên tích cực
Tham gia
17/10/14
Bài viết
1,058
Được thích
170
Em chào các thầy cô, Anh/chị
Em muốn tô màu chữ trong List box (mục đích để dễ phân biệt)
Trong List box của em thì Mã hàng hóa có phân biệt chữ A hay B đứng đầu
Bây giờ em muốn nếu mã hàng hóa nào có chữ B đứng đầu thì sẽ tô chữ màu đỏ cho cả dòng đó
Ví dụ: Mã hàng hóa là B0001 thì tô cả dòng gồm mã hàng hóa, tên, đơn vị tính và giá
Em có thử làm trong Sub UserForm_Initialize nhưng không được
Em không biết có thể tô màu chữ trong list box được không và nó có ảnh hưởng nhiều đến tốc độ không?
Thầy cô và anh chị giúp em
Mã:
Private Sub UserForm_Initialize()
    Dim EndR As Long
    Dim i As Long
    ReDim Ar0(1 To 21, 1 To 6)

    With Sheets("MA")
        EndR = .Cells(65000, 2).End(xlUp).Row
        Arr = .Range(.Cells(12, 1), .Cells(EndR, 6)).Value
       
         '*********** dinh dang phan cach hang ngan
        For i = 1 To UBound(Arr, 1)
            Arr(i, 4) = (Format(Arr(i, 4), "#,##0"))
            '************** to màu chu B
'            If (Left(Arr(i, 1), 1) = "B") Then
'                Arr(i, 1).Font.ColorIndex = 3
'            End If
            '************
        Next
        '**************

    End With
    With Me.MHList
        .ColumnCount = 6
        .List = Arr
    End With
    Ar0(1, 1) = "Mã Hàng"
    Ar0(1, 2) = "Tên Hàng "
    Ar0(1, 3) = "DVT"
    Ar0(1, 4) = "GIÁ BÁN"
    Ar0(1, 5) = "GIÁ MUA"
    Ar0(1, 6) = "MÔ TA"
    Me!lbSelect.List = Ar0()    ' taòo caìc tiêu ðêÌ cho lbSelect.List
    NhomHang.SetFocus
    Erase Arr
End Sub
Phần tô đậm do em làm
Em cảm ơn!
 

File đính kèm

  • CuaHang_Hoi-N-1.xlsm
    4.5 MB · Đọc: 5
Lần chỉnh sửa cuối:
Em có thử làm trong Sub UserForm_Initialize nhưng không được
Dĩ nhiên Arr(i, 1).Font.ColorIndex = 3 là không được rồi. Arr(i, 1) không là OBJECT. Mà thậm chí không phải cứ OBJECT là có thuộc tính FONT.

Em muốn tô màu chữ trong List box (mục đích để dễ phân biệt)
Theo tôi vấn đề không hề dễ. Chưa nói tới là không thể ...

Chưa nói tới ListBox của VBA, nó là kiểu "BẮT CHƯỚC" control ListBox của system Windows, mà ngay cả với control ListBox của system cũng không hề đơn giản.

Control lớp (class) "ListBox" của system Windows khi tạo mà không có style LBS_OWNERDRAWFIXED thì mặc định nó được "vẽ" - "làm mới" bởi OWNER, tức trong nhiều trường hợp đó chính là cửa sổ (window) chính. Vd. cửa sổ bị cửa sổ của notepad nằm trên che đi. Khi đóng notepad thì cửa sổ phải tự "làm mới".
Nếu ListBox được tạo với style LBS_OWNERDRAWFIXED thì khi cần làm mới thì một thông điệp WM_DRAWITEM sẽ được gửi tới OWNER. Hàm cửa sổ phải phục vụ và xử lý WM_DRAWITEM bằng cách "vẽ" lại, "làm mới" ListBox. Người viết code sẽ định đoạt cách vẽ. Lúc đó có thể vẽ sao cho vd. chuỗi giá trị được chọn (selected) sẽ có phông chữ nghiêng (italic) và nền mầu đỏ thay cho blue. Tức khi đã "tự vẽ" thay cho mặc định thì có thể làm nhiều trò, thậm chí vẽ cả ảnh vào listbox luôn. Đó là khi người lập trình API viết code tự tạo ListBox với style LBS_OWNERDRAWFIXED, với hàm cửa sổ phục vụ và xử lý thông điệp WM_DRAWITEM.

Tuy nhiên khi ListBox đã được tạo (bởi phần mềm nào đó) thì không thể thay đổi để thêm cho nó style LBS_OWNERDRAWFIXED. Nhiều người cứ nghĩ là chỉ cần đọc style hiện hành của ListBox -> thêm style LBS_OWNERDRAWFIXED -> thiết lập style mới có chứa LBS_OWNERDRAWFIXED -> thay đổi hàm cửa sổ của OWNER để phục vụ WM_DRAWITEM là xong
Mã:
style = GetWindowLongPtr(hWndListBox, GWL_STYLE) Or LBS_OWNERDRAWFIXED
SetWindowLongPtr hWndListBox, GWL_STYLE, style
...
thay đổi hàm cửa sổ

Nhưng chắc chắn sẽ không thể thành công. Đấy là nói về control ListBox xịn của Windows còn không thể thì cái gọi là "BẮT CHƯỚC" ListBox càng không thể.

Nhưng tôi cũng chỉ là người nên tôi không thể biết hết mọi cái trên trời, trên biển và trên đất liền. Vậy tôi lót dép chờ xem có ai đó biểu diễn không.
 
Lần chỉnh sửa cuối:
Upvote 0
Nhưng tôi cũng chỉ là người nên tôi không thể biết hết mọi cái trên trời, trên biển và trên đất liền. Vậy tôi lót dép chờ xem có ai đó biểu diễn không.
Tôi thì không chờ, vì yêu cầu đó đối với tôi là vô bổ. Nhất là khi đưa dữ liệu lên, trả dữ liệu xuống còn chưa làm nên thân, thì màu mè nghĩa lý gì?
 
Upvote 0
Web KT

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

Back
Top Bottom