|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
LisView - закрасить колонки и ячейки разными цветами
Здравствуйте.
Решил "разукрасить" ListView. Получилось закрасить четные строки одним, не четные другим цветом: Код:
WM_NOTIFY: begin if PNMHDR(lParam).hwndFrom = LV then case PNMHDR(lParam).code of NM_CUSTOMDRAW: begin case PNMLVCustomDraw(LParam).nmcd.dwDrawStage of CDDS_PREPAINT: result:=CDRF_NOTIFYITEMDRAW; CDDS_ITEMPREPAINT: if PNMLVCustomDraw(LParam).nmcd.dwItemSpec mod 2 = 0 then PNMLVCustomDraw(LParam).clrTextBk := RGB(0, 255, 100) else PNMLVCustomDraw(LParam).clrTextBk := RGB(255, 255, 100) end; end; end; end; Работает. Но сделано ли правильно? А вот как закрасить колонки + как закрасить ячейки любой строки и любого столбца по условию? Искал в инете, не помогло. Помогите пожалуйста. Полный код по требованию! |
#2
|
|||
|
|||
Извращенец.
У TListView, если, конечно, разговор о стандартном дельфевом контроле, есть спец. событие отрисовки ячейки. |
#3
|
||||
|
||||
Цитата:
Цитата:
|
#4
|
|||
|
|||
тогда полный алес. Лезь в исходники и смотри как это реализованно в библиотеке (получение контроля отрисовки ячейки).
Ну и вот тут читани: http://stackoverflow.com/questions/6...ndividual-cell |
#5
|
||||
|
||||
Код:
type TCustomAppForm = class(...) ... function CustomDraw(NMCustomDraw: PNMLVCustomDraw): Integer; function ItemPrepaint(NMCustomDraw: PNMLVCustomDraw): Integer; virtual; function SubItemPostPaint(NMCustomDraw: PNMLVCustomDraw): Integer; virtual; ... function TCustomAppForm.CustomDraw(NMCustomDraw: PNMLVCustomDraw): Integer; begin Result:=CDRF_DODEFAULT; case NMCustomDraw^.nmcd.dwDrawStage of CDDS_PREPAINT: Result:=CDRF_NOTIFYITEMDRAW; CDDS_ITEMPREPAINT: Result:=ItemPrepaint(NMCustomDraw); CDDS_SUBITEM or CDDS_ITEMPREPAINT: Result:=CDRF_NOTIFYPOSTPAINT; CDDS_SUBITEM or CDDS_ITEMPOSTPAINT: Result:=SubItemPostPaint(NMCustomDraw); end; end; function TCustomAppForm.ItemPrepaint(NMCustomDraw: PNMLVCustomDraw): Integer; begin Result:=CDRF_NOTIFYSUBITEMDRAW; end; function TCustomAppForm.SubItemPostPaint(NMCustomDraw: PNMLVCustomDraw): Integer; begin Result:=CDRF_DODEFAULT; end; ... type TAppForm = class(TCustomAppForm) ... function ItemPrepaint(NMCustomDraw: PNMLVCustomDraw): Integer; override; function SubItemPostPaint(NMCustomDraw: PNMLVCustomDraw): Integer; override; ... function TAppForm.ItemPrepaint(NMCustomDraw: PNMLVCustomDraw): Integer; begin Result:=inherited ItemPrepaint(NMCustomDraw); case ListViewGetItemImage(NMCustomDraw^.nmcd.dwItemSpec) of IMAGE_READY, IMAGE_ERROR: NMCustomDraw^.clrTextBk:=GetSysColor(COLOR_BTNFACE); end; end; function TAppForm.SubItemPostPaint(NMCustomDraw: PNMLVCustomDraw): Integer; var ARect: TRect; ... begin Result:=inherited SubItemPostPaint(NMCustomDraw); if NMCustomDraw^.iSubItem=3 then begin ListViewGetSubItemRect(NMCustomDraw^.nmcd.dwItemSpec, NMCustomDraw^.iSubItem, LVIR_BOUNDS, @ARect); InflateRect(ARect, -1, -1); case ListViewGetItemImage(NMCustomDraw^.nmcd.dwItemSpec) of IMAGE_ERROR: begin DrawError(NMCustomDraw^.nmcd.hdc, ARect); Result:=CDRF_SKIPDEFAULT; end; IMAGE_READY: begin DrawReady(NMCustomDraw^.nmcd.hdc, ARect); Result:=CDRF_SKIPDEFAULT; end; IMAGE_LOADING: begin DrawProgressBar(NMCustomDraw^.nmcd.hdc, ARect, Trunc((GetLoadedBytes(NMCustomDraw^.nmcd.dwItemSpec)*100)/GetTotalFileSize(NMCustomDraw^.nmcd.dwItemSpec)) ); Result:=CDRF_SKIPDEFAULT; end; end; end; end; Пишу программы за еду. __________________ |
#6
|
||||
|
||||
Цитата:
А что такое ListViewGetItemImage и ListViewGetItemImage? |
#7
|
||||
|
||||
Получилось закрасить первую колонку разным цветом, 2-я колонка другим, 3-ю колонку следующим цветом + общий фон.
ListView.jpg Но как отдельную ячейку? я не пойму. |
#8
|
||||
|
||||
номер элемента (строки) NMCustomDraw^.nmcd.dwItemSpec
Код:
function TCustomAppForm.ListViewGetItemImage(AItem: Integer): Integer; var Item: TLVItem; begin Item.mask:=LVIF_IMAGE; Item.iItem:=AItem; Item.iSubItem:=0; ListView_GetItem(FListView, Item); Result:=Item.iImage; end; Пишу программы за еду. __________________ |
#9
|
||||
|
||||
Так и разобрался с ячейкй.
К скрину: Код:
WM_NOTIFY: begin if PNMHDR(lParam).hwndFrom = LV then case PNMHDR(lParam).code of NM_CUSTOMDRAW: begin case PNMLVCustomDraw(LParam).nmcd.dwDrawStage of CDDS_PREPAINT: result:=CDRF_NOTIFYITEMDRAW; CDDS_ITEMPREPAINT: Result:=CDRF_NOTIFYSUBITEMDRAW; CDDS_SUBITEM or CDDS_ITEMPREPAINT: begin Result:=CDRF_DODEFAULT; PNMLVCustomDraw(LParam).clrTextBk := RGB (100, 100, 100); case PNMLVCustomDraw(LParam).iSubItem of 0: if PNMLVCustomDraw(LParam).nmcd.dwItemSpec mod 2 = 0 then PNMLVCustomDraw(LParam).clrTextBk := RGB(0, 255, 100) else PNMLVCustomDraw(LParam).clrTextBk := RGB(255, 255, 100); 1: PNMLVCustomDraw(LParam).clrTextBk := RGB (255, 100, 80); // цвет текста колонки 1 2: PNMLVCustomDraw(LParam).clrTextBk := RGB (20, 20, 255); // цвет текста колонки 2 3: PNMLVCustomDraw(LParam).clrTextBk := RGB (255, 20, 255); // цвет текста колонки 3 end; end; end; end; |