Как да промените цвета на заглавката - и в 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) ; // Цвят на фона