gpt4 book ai didi

Delphi TListview OwnerDraw SubItems - 更改默认字体(在 Canvas 上绘制后,它会以某种方式加粗)

转载 作者:行者123 更新时间:2023-12-03 15:22:14 42 4
gpt4 key购买 nike

如果您将ownerdraw与TListView一起使用,则对于自定义绘制的子项之后的所有子项,即使listview font.style设置为[],子项默认情况下都是粗体字体样式。

我发现的解决方法是强制在 CustomDrawSubItem 事件中设置样式:

ListView2.Canvas.Font.Style := [fsItalic];
ListView2.Canvas.Font.Style := [];

(除非默认样式设置为 [] 之外的其他内容,否则使用 [] 的简单调用将不起作用,因为 SetStyle 调用不会认为样式已更改)

然而,这是一个丑陋的修复,需要额外的处理时间。有更好的解决办法吗?

演示项目:http://www.mediafire.com/?v8bsdpvpfqy47vn

最佳答案

我没有遇到你描述的具体情况,但我遇到过类似的问题。当我使用所有者绘制的 TListView 并分配一个 OnAdvancedCustomDrawSubItem 事件来更改每个子项的 Canvas.Font 时,我发现在我更改一个子项的 Sender.Canvas.Font 后,即使我更改了它们的 Sender.Canvas.Font ,后续子项也会使用错误的设置进行绘制。我的解决方法是在 OnAdvancedCustomDrawSubItem 事件处理程序末尾手动调用 Sender.Canvas.Font.OnChange 事件处理程序。这会指示 TListView 向 Windows 报告 CDRF_NEWFONT,然后一切都会正确绘制。这就好像在 TListView 被所有者绘制时 Sender.Canvas.Font.OnChange 事件没有正确连接,因此它不会检测字体变化,从而无法正确向 Windows 报告。

关于Delphi TListview OwnerDraw SubItems - 更改默认字体(在 Canvas 上绘制后,它会以某种方式加粗),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13485761/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com