Как нарисовать что-нибудь в ячкйке ListView?
uses
{...,} CommCtrl;
procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState;
var DefaultDraw: Boolean);
var
r: TRect;
begin
if ListView_GetSubItemRect(Sender.Handle, Item.Index, SubItem, LVIR_BOUNDS, @r) then
begin
Sender.Canvas.Draw(r.Left + (r.Width div 2) - (cbUncheckedNormal.Width div 2),
r.Top + (r.Height div 2) - (cbUncheckedNormal.Height div 2), BMP);
DefaultDraw := False;
end;
end;
// Если нужно обновлять ListView во время изменения ширины колонки,
// то можно сделать так:
// type
// TListView = class(Vcl.ComCtrls.TListView)
// protected
// procedure WndProc(var Msg: TMessage); override;
// end;
//
// procedure TListView.WndProc(var Msg: TMessage);
// var
// Hdn: ^THDNotify;
// begin
// inherited;
// if Msg.Msg = WM_NOTIFY then
// begin
// Hdn := Pointer(Msg.lParam);
// if (Hdn.Hdr.code = HDN_ITEMCHANGEDW) or (Hdn.Hdr.code = HDN_ITEMCHANGEDA) then
// InvalidateRect(Handle, nil, True);
// end;
end;
|