【问题标题】:Delphi, ListView, how to remove the margin between items in vsIconDelphi,ListView,如何删除vsIcon中项目之间的边距
【发布时间】:2012-10-24 07:35:15
【问题描述】:

使用 Delphi XE3,在 vsIcon 模式下分配一个图像列表的 Listview。

我添加了一些项目并为它们分配了一个 ImageIndex,每个图像/项目之间的间距/边距非常大,我该如何更改?没有自定义绘图是否有可能?

【问题讨论】:

    标签: delphi listview


    【解决方案1】:

    你可以使用ListView_SetIconSpacing

    uses commctrl;
    ..
    ListView_SetIconSpacing(ListView1.Handle, 36, 36);
    ListView1.Arrange(arAlignTop);  // refresh view
    

    参考文档,数值必须包含图标大小,否则图标会相互重叠。

    您可以通过为 cx 和 cy 发送 '-1' 来重置视图,返回值是当前间距,例如,要减少一定量的间距,您可以这样做:

    var
      Spacing: DWORD;
    begin
      Spacing := ListView_SetIconSpacing(ListView1.Handle, WORD(-1), WORD(-1));
      ListView_SetIconSpacing(ListView1.Handle,
                              LoWord(Spacing) - 10, HiWord(Spacing) - 6);
      ListView1.Arrange(arAlignTop);
    

    【讨论】:

    • @Marjan,嗯,它是 commctrl.pas 中的一个单行。 :) AFAIK 我们为许多/大多数宏提供了一个衬里,例如 RGB()。谢谢。
    • 谢谢。唯一的问题是,选择边界是否与下一个图标重叠,我想唯一的解决方法是自定义绘图? i.imgur.com/2nZvk.png
    • @hikari - 看起来控件正在为文本标签保留空间。不知道有什么办法可以摆脱。
    • 为了获得更好的视图,请尝试将列表视图的字体大小设置为较小的值,例如 1,并至少为 4 像素加上图标大小留出空间。这 4 个像素可能很重要,因为它也在文档中提到。无论如何,您都没有使用文本标签..
    • 谢谢!就是这样,将字体设置为 1 解决了重叠:)