【问题标题】:Using checkbox in virtual mode listview在虚拟模式列表视图中使用复选框
【发布时间】:2011-10-26 06:06:08
【问题描述】:

我正在学习制作虚拟模式列表视图。到目前为止,我的问题是我不能在列表视图中使用复选框。我已经阅读了来自http://delphi-kb.blogspot.com/2011/02/draw-checkboxes-in-virtual-mode.html 的链接,但我没有看到任何复选框。有什么想法吗?

【问题讨论】:

  • 顺便说一句:您使用的是哪个 Delphi 版本? (我这里是 D2007)
  • 我的程序也使用 D2007,但我现在正在尝试 DXE2。

标签: delphi listview tcheckbox


【解决方案1】:

显然,当启用OwnerData 时,您必须自己绘制复选框(如问题中链接的文章中所述)。

所以您必须将OwnerDraw 设置为True(除了OwnerData,这两个都是独立 标志!)并在OnCustomDrawItem 事件中自己绘制复选框。

更新:

看来这并不完全正确,OnCustomDrawItem 事件在OwnerDraw = False 的情况下也被触发了。

http://docwiki.embarcadero.com/VCL/XE2/en/ComCtrls.TListView.OnCustomDrawItem

更新 2:

问题中链接的代码仅适用于OwnerDraw = FalseCheckBoxes = True

否则 VCL 不会在左侧保留空间来绘制 CheckBox。

顺便说一句:您最好使用更高级的组件,例如 Mike Lischke 的 TVirtualTreeView。

【讨论】:

  • Jens,我已经成功在虚拟模式下使用listview了。我也按照说明从我的问题中的链接添加复选框,但我仍然无法让复选框出现在列表视图中。上面链接中的代码对您有用吗?
  • 当您将 CheckBoxes 设置为 True 并将 OwnerDraw 设置为 False 时,它​​“有效”。如果你不这样做,VCL 将在 CheckBoxes 上绘制,你将看不到它们。
  • 从上面的链接中,DrawCheckMark(FileListMenu.ListView1, Item, Item.Checked); 中的FileListMenu 是什么?我只是把它放在我的代码DrawCheckMark(ListView1, Item, Item.Checked); 中。 Jens,我曾经使用过 TVirtualTree!但我期待是否必须将我的程序移植到 x64。没有人保证 TVirtualTree 将与 DXE2 x64 兼容。我做了一个简单的演示,使用上面链接中的代码,如果你还有五分钟,请检查。 uploading.com/files/371emeb4/demo.zip
  • 好吧 CheckBox 在那里,它没有被绘制为选中状态。如果您将Item.Checked := True 添加到您的ListView1Data 中,则会将其绘制为选中状态。所以一切都按预期工作。
  • 你不能通过点击它来改变 CheckBox 的状态,如果你想要这种行为,你必须自己编写代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
  • 2013-03-20
  • 1970-01-01
  • 1970-01-01
  • 2016-04-25
相关资源
最近更新 更多