procedure TmyListView.WMNotify(var Message: TWMNotify);
var
FHeaderHandle: THandle;
begin
inherited;
FHeaderHandle := SendMessage(Handle, LVM_GETHEADER, 0, 0); if ValidHeaderHandle and (Message.NMHdr^.hwndFrom = hHead) then
begin
with Message.NMHdr^ do
begin
if (hwndfrom = FHeaderHandle) then
case code of HDN_BEGINTRACK,HDN_BEGINTRACKW:
FHeaderTracking := True; HDN_ENDTRACK,HDN_ENDTRACKW:
begin
FHeaderTracking := False;
SetHeaderOwnerDraw(FHeaderOwnerDraw);
end;
HDN_ITEMCHANGED:
SetHeaderOwnerDraw(FHeaderOwnerDraw); HDN_DIVIDERDBLCLICK:
begin
if not FHeaderTracking then
SetHeaderOwnerDraw(FHeaderOwnerDraw);
with PHDNotify(Pointer(Message.NMHdr))^ do
begin
Column[Item].Width :=ListView_GetColumnWidth(Handle, Item)+1;
if IsCustomDrawn(dtControl, cdPrePaint) then Invalidate;
end;
end; NM_CUSTOMDRAW:
begin
with PNMCustomDraw(Message.NMHdr)^ do
begin
case dwDrawStage of
CDDS_PREPAINT: Message.Result := CDRF_NOTIFYITEMDRAW;
CDDS_ITEMPREPAINT:
begin
SetTextColor(hdc, clwhite);
SetBkColor(hdc, clskyblue);
Message.Result := CDRF_NEWFONT;
end; end;
end;
end;
end;
end;
end;
end;以前写的,有点乱,你可以参考一下
var
FHeaderHandle: THandle;
begin
inherited;
FHeaderHandle := SendMessage(Handle, LVM_GETHEADER, 0, 0); if ValidHeaderHandle and (Message.NMHdr^.hwndFrom = hHead) then
begin
with Message.NMHdr^ do
begin
if (hwndfrom = FHeaderHandle) then
case code of HDN_BEGINTRACK,HDN_BEGINTRACKW:
FHeaderTracking := True; HDN_ENDTRACK,HDN_ENDTRACKW:
begin
FHeaderTracking := False;
SetHeaderOwnerDraw(FHeaderOwnerDraw);
end;
HDN_ITEMCHANGED:
SetHeaderOwnerDraw(FHeaderOwnerDraw); HDN_DIVIDERDBLCLICK:
begin
if not FHeaderTracking then
SetHeaderOwnerDraw(FHeaderOwnerDraw);
with PHDNotify(Pointer(Message.NMHdr))^ do
begin
Column[Item].Width :=ListView_GetColumnWidth(Handle, Item)+1;
if IsCustomDrawn(dtControl, cdPrePaint) then Invalidate;
end;
end; NM_CUSTOMDRAW:
begin
with PNMCustomDraw(Message.NMHdr)^ do
begin
case dwDrawStage of
CDDS_PREPAINT: Message.Result := CDRF_NOTIFYITEMDRAW;
CDDS_ITEMPREPAINT:
begin
SetTextColor(hdc, clwhite);
SetBkColor(hdc, clskyblue);
Message.Result := CDRF_NEWFONT;
end; end;
end;
end;
end;
end;
end;
end;以前写的,有点乱,你可以参考一下
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if (Item.Index mod 2) = 0 then
Sender.Canvas.Brush.Color := 背景色; //淡一点
end;
这是以前编的控件,本来就没有完工,不过可以改标题颜色,不太好做,
也可以用另外麻烦点方法解决,你告诉我信箱,我给你发个控件,是我参考别人改的。