С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 11.03.2011
Сообщений: 8

Выделение цветом строки в ListView

11.03.2011, 18:08. Показов 2681. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте !
Подскажите пожалуйста , как можно выделять строки в стандартном мелкософтовсом ListView разными цветами ? ( Не путать с backcolor !)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.03.2011, 18:08
Ответы с готовыми решениями:

Выделение цветом строк в ListView
Как организовать Выделение цветом строк в ListView по условию ? Например, если строки содержат название дня недели, то воскресенье...

Выделение цветом добавляемый в access текст
Есть код который добавляет заданный пользователем текст в access. Возможно ли сделать так что-бы при добавлении этого текста в access он...

Выделение имени цветом после выполнения условий
Помогите, пожалуйста, создать цикл в Визуал Бейсике: Выделите красным цветом имена студентов, которые получили хотябы одну оценку 10....

4
Comanche
12.03.2011, 18:35
Custom draw!
Даю кусок кода - без АПИ-деклараций и установки сабклассинга; надеюсь, всё равно разберёшься.
Короче: необходимо подменить оконную процедуру формы, на которой расположен листвью, и в процедуре написАть следующее:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Public Function WindowProc(ByVal Hwnd As Long, ByVal uMsg As Long, _
                           ByVal wParam As Long, ByVal lParam As Long) As Long
    
    Dim tNMH As NMHDR
    
    If uMsg = WM_NOTIFY Then
        CopyMemory tNMH, ByVal lParam, Len(tNMH)
        If tNMH.hwndFrom = Form1.ListView1.Hwnd And tNMH.code = NM_CUSTOMDRAW Then
            ' Debug.Print 'NM_CUSTOMDRAW'
            WindowProc = plCustomDraw(lParam)
            Exit Function
        End If
    End If
    
    WindowProc = CallWindowProc(mWndProcNext, Hwnd, uMsg, wParam, ByVal lParam)
    
End Function
Функция plCustomDraw должна выглядеть так:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Private Function plCustomDraw(ByVal lParam As Long) As Long
    Dim NMLVCD As NMLVCUSTOMDRAW
    Dim lLen As Long
    Dim hFont As Long
    Dim lvRowIndex As Long
    
    ' Get the CustomDraw data.
    lLen = Len(NMLVCD)
    
    CopyMemory NMLVCD, ByVal lParam, lLen
    lvRowIndex = NMLVCD.nmcd.dwItemSpec
    
    Select Case NMLVCD.nmcd.dwDrawStage
        
        Case CDDS_PREPAINT
            ' Tell it we want to be told when an item is drawn.
            plCustomDraw = CDRF_NOTIFYITEMDRAW
            
        Case CDDS_ITEMPREPAINT
            
            ' An item is about to be drawn:
            plCustomDraw = CDRF_NOTIFYITEMDRAW
            
            If Not (NMLVCD.nmcd.lItemlParam = 0) Then
                NMLVCD.clrText = TranslateOLEtoRBG(<задай тут цвет текста>)
                NMLVCD.clrTextBk = TranslateOLEtoRBG(<задай тут цвет фона текста>)
                
                hFont = SendMessageLong(<задай тут хэндл объекта - образца нужного шрифта>, WM_GETFONT, 0, 0)
                SelectObject NMLVCD.nmcd.hdc, hFont
                
                ' при желании - избавляемся от 'фокусного' прямоугольника у рядов листвью:
                NMLVCD.nmcd.uItemState = NMLVCD.nmcd.uItemState And (Not CDIS_FOCUS)
                
                CopyMemory ByVal lParam, NMLVCD, lLen
                
            End If
            
        Case CDDS_ITEMPOSTPAINT
            plCustomDraw = CDRF_NEWFONT
        
    End Select
    
End Function
Т.е. ты можешь менять, как захочешь, цвет текста, цвет фона текста и шрифт; кроме того, можешь убрать 'фокусный' прямоугольник. Чтобы это изменение было 'индивидуальным' для определённого ряда листвью, ряд можно вытащить из структуры NMCUSTOMDRAW.

PS: в коде выше есть ссылка вот на эту функцию:

Code
1
2
3
4
5
6
7
Public Function TranslateOLEtoRBG(ByVal dwOleColour As Long) As Long
  ' check to see if the passed colour value is and OLE or RGB colour, and if an OLE colour, translate it to a valid
  ' RGB color and return. If the colour is already a valid RGB colour, the function returns the colour without change
  
   OleTranslateColor dwOleColour, 0, TranslateOLEtoRBG
      
End Function
0 / 0 / 0
Регистрация: 11.03.2011
Сообщений: 8
13.03.2011, 11:46  [ТС]
Спасибо , с этим геммороем я уже работал , бывает сглючивает под разными системами :-( , думал может у кого есть что-то еще.
Но все равно спасибо большое.
0
Comanche
13.03.2011, 11:54
Увы, этот 'геморрой' - стандартное средство 'подкручивания' бэйсиковских контролов. Custom draw - не самая страшная вещь; есть ещё страшнее - owner draw, когда ВЕСЬ контрол надо рисовать самому )
Comanche
13.03.2011, 18:13
>> бывает сглючивает под разными системами

- обычно это из-за того, что при объявлении разных АПИшных структур не учитывается версия ОС - а ведь многие АПИшные структуры зависят от версии виндов (обычно размер структур 'растёт' вместе с ростом версии ОС).
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.03.2011, 18:13
Помогаю со студенческими работами здесь

Выделение некоторых слов цветом в TextBox или Label
Я хотел бы спросить,возможно ли сделать на форме textbox or label, запихнуть туда текст и в нём выделить другим цветом или другим...

Как 'отрисовать' определенную строку в ListView другим цветом
Подскажите пожалуйста как 'отрисовать' определенную строку в ListView другим цветом.

Как при добавлении новой строки в ListView изменить высоту строки?
Всем привет! В одной теме я решил совместить несколько вопросов, но по общей теме. 1) Как в листвью при добавлении новой строки...

Как перебрать все строки ListView в цикле, если при этом некоторые строки удаляются?
cnt = lv.ListItems.Count For i = 1 To cnt If lv.ListItems.Item(i).Selected Then ... тут чего-то делаем...

Заливка строки цветом
Уважаемые, добрый день! Вопрос по VB6.0. Подскажите пожалуйста, как в MSFlexGrid закрасить строку в цвет, при этом, строка должна...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru