Delphi:不必要的列线和列线列表视图 (SysListView32) 中没有 RowSelect

发布于 2024-11-29 20:23:15 字数 537 浏览 1 评论 0 原文

有一个带有样式列表视图(感谢Sertac Akyuz提供了解决方案:))

ListView_SetExtendedListViewStyle(ListView1.Handle, LVS_EX_DOUBLEBUFFER);

但是现在列表视图有两个不足:不必要的列蓝线和行不能即使 RowSelect:=True; 也会被选择。如果要选择项目,则选择行,对于子项目不起作用。

如果执行 GridLines:=True 那么网格将不会出现,列表视图的背景会发生一些变化...

在此处输入图像描述

如果使用 OwnerDraw 绘制项目,则线条不会出现,而只会出现在项目下方。我可以绘制整个背景,但这是隐藏那些蓝线的最简单方法吗?

我能处理这些吗?

感谢您的宝贵回答!

There is a list view with a style (thanks to Sertac Akyuz for a solution:) )

ListView_SetExtendedListViewStyle(ListView1.Handle, LVS_EX_DOUBLEBUFFER);

But now a list view has two lacks: unnecessary column blue lines and rows are cannot be selected even if RowSelect:=True;. Rows are selected if to select Items, it doesn't work for Sub Items.

If to do GridLines:=True then a grid won't appear, something happens to a list view's background...

enter image description here

If to draw items with OwnerDraw then lines don't appear but only under items. I can paint a whole background, but is it the easiest way to hide those blue lines?

Can I handle these?

Thanks for your valuable answers!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

阳光的暖冬 2024-12-06 20:23:15

当您调用时,

ListView_SetExtendedListViewStyle(ListView1.Handle, LVS_EX_DOUBLEBUFFER);

您会取消设置所有其他扩展样式标志,仅将 LVS_EX_DOUBLEBUFFER 设置为打开。因此使用

ListView_SetExtendedListViewStyle(ListView1.Handle,
    ListView_GetExtendedListViewStyle(ListView1.Handle) or LVS_EX_DOUBLEBUFFER);

来保留现有的标志。

垂直线可能是 VCL 尽可能模仿系统列表视图的产物。启用主题后,VCL 调用 SetWindowTheme 在列表视图上将“explorer”作为“SubAppName”参数传递,因此您可以在资源管理器文件夹视图中看到的垂直线是重复的。要撤消该操作,您可以自己再次调用该函数:

  SetWindowTheme(ListView1.Handle, nil, nil);

请注意,您可能不喜欢列表视图变成的样子:)。

When you call

ListView_SetExtendedListViewStyle(ListView1.Handle, LVS_EX_DOUBLEBUFFER);

you unset all other extended style flags, seting only LVS_EX_DOUBLEBUFFER on. So use

ListView_SetExtendedListViewStyle(ListView1.Handle,
    ListView_GetExtendedListViewStyle(ListView1.Handle) or LVS_EX_DOUBLEBUFFER);

to preserve existing flags.

The vertical lines are probably a product of the VCL's effort to imitate a system listview as much as possible. When themes are enabled, VCL calls SetWindowTheme on the listview passing 'explorer' as 'SubAppName' parameter, so the vertical lines you can see in an explorer folder view is duplicated. To undo that, you can call the function again yourself:

  SetWindowTheme(ListView1.Handle, nil, nil);

Note that you might not like what the listview becomes :).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文