【问题标题】:Simple TListView OwnerDraw Text Font Size and Color example?简单的 TListView OwnerDraw 文本字体大小和颜色示例?
【发布时间】:2012-03-21 04:48:36
【问题描述】:

我正在尝试使用OnCustomDrawItem 在报告模式下绘制一个包含 4 列的列表视图控件。

当我尝试更改 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;

【问题讨论】:

  • 相关但不改变字体大小:stackoverflow.com/questions/7696499/…
  • 您是否想要不同项目的不同字体大小和字体?这就是我不知道该怎么做。
  • 显然,您可以更改字体大小,但当然,所有行高都必须相同,因此您只能在所有适合现有行的范围内更改字体大小高度。
  • @WarrenP 在这里设置太大的字体高度没问题see screenshot
  • 我说剪辑是个问题,不知道你的标准。 :-)

标签: delphi ownerdrawn tlistview


【解决方案1】:

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

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

【讨论】:

  • 你误会了。刷新适用于画布,而不是列表。 “TCanvas.Refresh”。来自文档:“调用刷新后调用画布的任何绘图方法将重新选择字体、画笔或笔进入 HDC”
  • DBGrid 和 List,是的,是两个不同的世界。但帆布不是。它是两个控件的 HDC。
  • 那行得通,如果我把它放在后面的话。实际上它是相关的。谢谢克里斯托弗。多么奇怪的事情。
  • 直到现在,我什至不知道TCanvas 有一个Refresh 方法!
  • VCL 中未记录的损坏。多么有趣。
猜你喜欢
  • 1970-01-01
  • 2018-01-23
  • 1970-01-01
  • 2014-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-21
  • 1970-01-01
相关资源
最近更新 更多