Как да промените цвета на заглавката - и в TListView, DelphiSite

Най-четени

Как да промените цвета на заглавката в TListView

Как да промените цвета на заглавката в TListView

За да направите това, в процедурата на прозореца ListView обработете съобщението WM_NOTIFY с кода NM_CUSTOMDRAW. И в манипулатора на това съобщение задайте цветове за фон и текст (можете също да зададете шрифт). Но в същото време дясната част на заглавката (областта на заглавката на ListView, разположена вдясно от колоните) няма да бъде боядисана. За да го боядисате, трябва да обработите съобщението WM_ERASEBKGND в процедурата на прозореца на заглавката, в която запълвате тази област с желания цвят. По-долу е даден малък пример с подкласове.

BkBrush:HBRUSH; // тук запазваме четката за фон

функция NewHeaderProc(wnd: HWND; Msg: кардинал; wParam: wParam;

lParam: lParam ) : Longint ; stdcall;

Резултат := CallWindowProc ( Указател ( GetWindowLong ( wnd, GWL_USERDATA ) ),

wnd, Msg, wParam, lParam );

if Msg=WM_ERASEBKGND then // боя върху зоната отдясно на колоните

BrushOld := SelectObject (wParam, BkBrush) ;

FillRect (wParam, ClientRect, BkBrush);

SelectObject(wParam, BrushOld);

функция NewListProc ( wnd:HWND; uMsg:UINT; wParam:WPARAM;

lParam:LPARAM) : цяло число; stdcall;

резултат:=CallWindowProc (Показател (GetWindowLong (wnd,GWL_USERDATA)), wnd,

ако uMsg=WM_NOTIFY тогава

ако PNMLISTVIEW ( lParam ) ^. hdr. код =NM_CUSTOMDRAW тогава

случай nmlvcd. nmcd. dwDrawStage на

SetTextColor (nmlvcd. nmcd. hdc,clRed); // цвят на текста

SetBkColor (nmlvcd. nmcd. hdc,clYellow); // Цвят на фона

CDDS_ITEMPOSTPAINT: резултат := CDRF_DODEFAULT;

процедура TForm1. FormCreate(Подател: TObject);

с ListView1 направете

ViewStyle :=vsReport; // стил, естествено vsReport

// запълнете ListView с нещо

за i:= 0 до 2 направи

Колони. Добавете. Caption := 'Column' + IntToStr ( i ) ;

Колони[ i ]. Ширина := 70 ;

осветен Caption := 'Item' + IntToStr ( i ) ;

за j:= 1 до 2 направете lit. Подточки. Добавяне ('SubItem' + IntToStr ( j ) + IntToStr ( i ) )

// промяна на процедурата за ListView

SetWindowLong ( ListView1. Манипулатор ,GWL_USERDATA,SetWindowLong ( ListView1. Манипулатор ,

GWL_WNDPROC, LPARAM ( @NewListProc ) ) ;

// същото за заглавката

SetWindowLong ( GetWindow ( ListView1. Манипулатор , GW_CHILD ), GWL_USERDATA,

SetWindowLong ( GetWindow ( ListView1. Манипулатор , GW_CHILD ),

GWL_WNDPROC, LPARAM ( @NewHeaderProc ) ) ;

BkBrush := CreateSol >(clYellow) ; // Цвят на фона