4
votes

I am trying to owner draw a List View control in report-mode with 4 columns, using OnCustomDrawItem.

When I try to change the Canvas.font.color, and that's all I do, I have no problems.

If I set canvas.font.size, I find that there is no change in the size of the text drawn by the control.

If I try to take over the painting of the text, from within OnCustomDrawItem, I find I can not. I am aware of how to use OnCustomDraw to draw in the background area, but I want to custom draw a listview ITEM, so that I can set the color and font name and font size of the text.

I know that there are some problems with using Canvas in the context of ListView owner draw, and some limitations of what you can do in a ListView.

procedure TForm1.MyListViewCustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
    Sender.Canvas.Font.Size := 13; // NO effect.
    Sender.Canvas.Font.Color := clRed; // WORKS.
    Sender.Canvas.Font.Style  :=Sender.Canvas.Font.Style + [fsBold]; // WORKS!
end;
1
Related but without font size changing: stackoverflow.com/questions/7696499/…Warren P
Are you wanting different font sizes and font faces for different items? That's what I can't work out how to do.David Heffernan
Apparently, you can change the font size, but of course, all the row heights have to be the same, so you can only change the font sizes within the range that will all fit in the existing row height.Warren P
@WarrenP No problem setting a too large font height here see screenshot.NGLN
I call clipping a problem, dunno about your standards. :-)Warren P

1 Answers

10
votes

I experienced a similar issue on TDBGrid.

Try to call Canvas.Refresh after you reassign the Canvas.Font properties.