【发布时间】:2012-11-09 06:16:29
【问题描述】:
如果您将 ownerdraw 与 TListView 一起使用,则子项默认情况下都是 BOLD 字体样式,即使 listview font.style 设置为 [],对于自定义绘制的子项之后的所有子项。
我发现的一种解决方法是强制在 CustomDrawSubItem 事件中设置样式:
ListView2.Canvas.Font.Style := [fsItalic];
ListView2.Canvas.Font.Style := [];
(除非默认样式设置为 [] 以外的其他内容,否则使用 [] 的简单调用将不起作用,因为 SetStyle 调用不认为样式已更改)
然而,这是一个丑陋的修复,需要额外的处理时间。有没有更好的解决方案?
【问题讨论】:
-
我只是好奇它所涉及的额外处理时间有多少时间?虽然我同意你的看法,但这很丑陋,但我认为处理时间不是这种情况下的一个因素。
-
在普通笔记本电脑上似乎每个子项大约需要 3 微秒,因此显示 10 个子项和 30 个项的 LV 需要重绘时需要 0.3 毫秒的额外处理时间。显然是的,这没什么,但它仍然是一个丑陋的修复,我想知道这个错误的根源(我假设它是,因为 JEDI 版本没有这个问题)。
-
在我看来像一个错误。如果你 touch 画布,它就会一团糟。所有其他绘图都是一团糟,例如将鼠标悬停在任何项目上。另一方面,它(错误)在 XE 和 XE2 中的功能相同。我现在没有其他 Delphi 可以检查。
-
这是另一个问题,我用 SetBkMode(TListView(Sender).Canvas.Handle, TRANSPARENT); ListView_SetTextBkColor(TListView(Sender).Handle, CLR_NONE); ListView_SetBKColor(TListView(Sender).Handle, CLR_NONE);
-
@hikari,你真是个天才!感谢 SetBkMode(...TRANSPARENT)... 这救了我!
标签: delphi ownerdrawn tlistview