Цветные строки в combobox - VB
Формулировка задачи:
Возможно ли сделать в combobox строки цветными ? Мне нужно выделить те, элементы которые недоступны для выбора. Как в менюхе, серым цветом. Может есть какой то другой способ ?
Решение задачи: «Цветные строки в combobox»
textual
Листинг программы
- Private Function DrawItem(drw As DRAWITEMSTRUCT) As Boolean
- Dim obr As Long, opn As Long, l As Long, s As String
- obr = SelectObject(drw.hdc, GetStockObject(DC_BRUSH))
- opn = SelectObject(drw.hdc, GetStockObject(DC_PEN))
- If (drw.itemState And ODS_SELECTED) Then
- SetDCBrushColor drw.hdc, GetSysColor(COLOR_HIGHLIGHT)
- SetDCPenColor drw.hdc, GetSysColor(COLOR_HIGHLIGHT)
- Rectangle drw.hdc, drw.rcItem.Left, drw.rcItem.Top, drw.rcItem.Right, drw.rcItem.Bottom
- SetDCPenColor drw.hdc, GetSysColor(COLOR_HIGHLIGHTTEXT)
- SetTextColor drw.hdc, GetSysColor(COLOR_HIGHLIGHTTEXT)
- Else
- SetDCBrushColor drw.hdc, GetSysColor(COLOR_WINDOW)
- SetDCPenColor drw.hdc, GetSysColor(COLOR_WINDOW)
- Rectangle drw.hdc, drw.rcItem.Left, drw.rcItem.Top, drw.rcItem.Right, drw.rcItem.Bottom
- SetDCPenColor drw.hdc, GetSysColor(COLOR_WINDOWTEXT)
- SetTextColor drw.hdc, drw.itemData ' GetSysColor(COLOR_WINDOWTEXT)
- End If
- SetBkMode drw.hdc, TRANSPARENT
- If drw.itemID >= 0 Then
- 'SetDCBrushColor drw.hdc, drw.itemData
- 'Rectangle drw.hdc, drw.rcItem.Left + 3, drw.rcItem.Top + 3, drw.rcItem.Left + 70, drw.rcItem.Bottom - 3
- l = SendMessage(drw.hwndItem, CB_GETLBTEXTLEN, drw.itemID, ByVal 0)
- If l Then
- s = Space(l + 1)
- l = SendMessage(drw.hwndItem, CB_GETLBTEXT, drw.itemID, ByVal s)
- s = Left(s, l)
- drw.rcItem.Left = drw.rcItem.Left + 2 ' 78
- End If
- Else
- drw.rcItem.Left = drw.rcItem.Left + 2
- s = "None"
- End If
- DrawText drw.hdc, ByVal s, Len(s), drw.rcItem, DT_VCENTER Or DT_SINGLELINE
- SelectObject drw.hdc, obr
- SelectObject drw.hdc, opn
- End Function
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д