在虚拟模式下使用复选框列表视图

3

顺便问一下,你用的是哪个 Delphi 版本?(我这里是 D2007) - Jens Mühlenhoff
我也使用D2007编写程序,但现在正在尝试DXE2。 - Charles Sungkono
1个回答

2
显然,当启用OwnerData时,你必须自己绘制复选框(如问题中链接的文章所述)。
因此,你必须将OwnerDraw设置为True(除了OwnerData外,这两个是独立的标志!),并在OnCustomDrawItem事件中自己绘制复选框。
更新:
看起来这不完全正确,在OwnerDraw = False的情况下,OnCustomDrawItem事件也会被触发。

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

更新2:
问题中链接的代码仅在OwnerDraw = FalseCheckBoxes = True时有效。
否则VCL不会在左侧保留空间以绘制复选框。
顺便说一句:您可能更好地使用Mike Lischke的更高级组件TVirtualTreeView。

Jens,我已经成功地在虚拟模式下使用了ListView。我还按照问题链接中的说明添加了复选框,但仍然无法在ListView中显示复选框。上面链接中的代码对你有效吗? - Charles Sungkono
当你将CheckBoxes设置为True并将OwnerDraw设置为False时,它会“工作”。如果你不这样做,VCL会覆盖CheckBoxes并且你看不到它们。 - Jens Mühlenhoff
从上面的链接中,DrawCheckMark(FileListMenu.ListView1, Item, Item.Checked); 中的 FileListMenu 是什么?我只是在我的代码中加入了 DrawCheckMark(ListView1, Item, Item.Checked);。Jens,我之前一直在使用 TVirtualTree!但是如果我必须将我的程序移植到 x64 上,就不确定 TVirtualTree 是否与 DXE2 x64 兼容。我制作了一个简单的演示,使用以上链接中的代码,如果您还有另外五分钟,请查看一下。http://uploading.com/files/371emeb4/demo.zip/ - Charles Sungkono
复选框已经存在,但它没有被绘制为选中状态。如果您在ListView1Data中添加Item.Checked := True,则它将被绘制为选中状态。所以一切都按预期工作。 - Jens Mühlenhoff
你不能通过单击复选框来更改其状态,如果你想要这种行为,你必须自己编写代码。 - Jens Mühlenhoff
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接