2012-03-02 42 views
4

我正在尝试使用OnCustomDrawItem以4列的报告模式绘制列表视图控件。简单的TListView OwnerDraw文本字体大小和颜色示例?

当我尝试更改Canvas.font.color,这就是我所做的,我没有任何问题。

如果我设置了canvas.font.size,我发现控件绘制的文本的大小没有变化。

如果我尝试从OnCustomDrawItem中接管文字的绘画,我发现我不能。我知道如何使用OnCustomDraw绘制背景区域,但我想自定义绘制一个ListView ITEM,以便我可以设置文本的颜色和字体名称以及字体大小。

我知道在ListView所有者绘制的上下文中使用Canvas时存在一些问题,以及您在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; 
+0

相关但没有字体大小更改:http://stackoverflow.com/questions/7696499/how-change-text-color-in-a-column-in-ttntlistview – 2012-03-02 17:27:29

+0

你想要不同的字体大小和字体的面不同的项目?这就是我无法解决的问题。 – 2012-03-02 18:05:25

+0

显然,您可以更改字体大小,但当然,所有行高都必须相同,因此您只能更改范围内的所有字体大小,以适应现有行高。 – 2012-03-02 18:28:55

回答

10

我在TDBGrid上遇到过类似的问题。

尝试在重新分配Canvas.Font属性后调用Canvas.Refresh

+0

你误会了。刷新是为画布而不是列表。 “TCanvas.Refresh”。从文档:“在调用刷新后调用画布的任何绘图方法将重新选择字体,笔刷或钢笔到HDC” – 2012-03-02 17:48:59

+0

DBGrid和List,是两个不同的世界。但画布不是。这是两个控件的HDC。 – 2012-03-02 17:50:10

+0

这工作,如果我把它后。其实它是中肯的。谢谢你,克里斯托弗。多奇怪的事情。 – 2012-03-02 18:06:02

相关问题