计数刷新到 TListView

Count refreshes to TListView

我有一个 TListView,根据用户从日志文件中选择的日期,我可以向其中添加从 none 到数百个项目的任何内容。我使用此代码来防止不必要的刷新:

listEvents.Items.BeginUpdate();
listEvents.Items.Clear();
// Add events
listEvents.Items.EndUpdate();

即便如此,在我快速开发的 PC 上,我还是可以看到列表的一些快速闪烁。在(慢得多的)生产 PC 上,闪烁很明显而且很难看。我的问题是有什么方法可以通过挂接到事件来计算 TListView 的刷新次数吗?然后我可以增加一个变量并在调试时在标签上显示变量的值。我尝试了 TListView::OnDrawItem 事件,但根本没有调用它。

我怀疑您没有使用虚拟列表视图。使用虚拟列表视图方法来显示数据。将 OwnerData 属性 设置为 true 并处理您在 OnData 事件中的显示。那应该可以防止闪烁。伪代码为:

procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem);
begin
  Item.Caption := FloatToStr(Item.Index + 1);
  Item.SubItems.Add('Your data here');
end;

尝试这样的方法来避免闪烁:

// Disable
SendMessage(listEvents.Handle, WM_SETREDRAW, Integer(False), 0);
try
  listEvents.Items.BeginUpdate();
  listEvents.Items.Clear();
  // Add events
  listEvents.Items.EndUpdate();
finally
  // enable
  SendMessage(listEvents.Handle, WM_SETREDRAW, Integer(True), 0);
end;

您可能不再需要使用 BeginUpdate 和 EndUpdate。

此致。