|Subject:||Strange behavior of customdrawn TListview|
|Posted by:||wp_xxyyzz (werner.paml…@freenet.de)|
|Date:||Sat, 10 Nov 2007|
I am using the OnCustomDraw type of events to display color bars in a
TListView. But the listview behaves very strangely. This is my code to
draw a rectangle with black border and red cross fill pattern:
procedure DrawRect(ACanvas:TCanvas; ARect:TRect);
with ACanvas do begin
// erase background
Brush.Color := clWhite;
Brush.Style := bsSolid;
InflateRect(ARect, -2, -2);
// draw rectangle
Pen.Color := clBlack;
Pen.Style := psSolid;
Brush.Color := clRed;
Brush.Style := bsCross;
This code is called from the OnCustomDraw event of the listview (in
report style, of course):
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
R : TRect;
DefaultDraw := false;
R := Item.DisplayRect(drBounds);
The problem is that the Listview always displays only a white rectangle
with black border, not the requested fill pattern.
When I remove, in "DrawRect", the FillRect call which erases the
background, the red fill pattern appears, but now the item is not
repainted correctly after resizing of the column.
I tested DrawRect with the OnPaint event handler of a Paintbox,
everything behaves as expected.
What am I doing wrong?
(Delphi 7 Pro)