【问题标题】:Item only show partial text in List View项目仅在列表视图中显示部分文本
【发布时间】:2018-11-15 08:09:20
【问题描述】:

我正在使用 Delphi XE3。在一个表单中,我添加了一个 TListView 并将其 ViewStyle 设置为 vsList。然后我尝试在列表视图中添加一个带有长文本的项目,如下:

    procedure TForm1.Button1Click(Sender: TObject);
    var
      ListItem: TListItem;
    begin
      ListItem := ListView1.Items.Add;
      ListItem.Caption := 'A very very long text long text long text long text long text';
    end;

但是,添加的项目只会显示部分文本,如下所示:

如何解决问题?

【问题讨论】:

  • @TomBrunberg 不要这么认为,完全有可能以列表视图样式显示全文
  • 我不明白反对票,这是一个完美的法律问题?
  • 正确的@DavidHeffernan,如答案所示。我不确定,因此 I think? 在我的评论中。

标签: listview delphi


【解决方案1】:

BeginUpdate/EndUpdate 重新计算列宽(但为什么在添加过程中不这样做?)并调用WM_SETREDRAW(可能添加重绘仅具有“旧”项目大小的矩形)

var
  ListItem: TListItem;
begin
  ListView1.Items.BeginUpdate;
  try
    ListItem := ListView1.Items.Add;
    ListItem.Caption := 'A very very long text long text long text long text long text';
  finally
    ListView1.Items.EndUpdate;
  end;
end;

【讨论】:

  • 有解释的机会吗?
  • 我看到更新确实执行了什么,但是好的解释必须指出在简单添加项目中遗漏了什么......
  • - .. 重新计算列宽 .. " - 只有那些存在的。我的意思是你不必在 vsList 模式下有任何列。重要的是@ 987654325@ 调用,似乎触发了某种内部布局计算。
  • 我认为使用 BeginUpdate/EndUpdate 会提高更新大量项目时的性能。这就是为什么 Delphi 在每一项更改时都不更新的原因。
【解决方案2】:

ListView_SetIconSpacing 改变图标/项目的大小:

uses commctrl;

[...]

ListView_SetIconSpacing(ListView1.Handle, ListView1.Width, 25);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多