计数刷新到TListView

时间:2015-04-09 13:19:32

标签: delphi user-interface

我有一个TListView,根据用户从日志文件中选择的那天,我可以在其中添加任何内容,包括无数项。我使用此代码来防止不必要的刷新:

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

即便如此,在我的快速开发PC上,我可以看到列表中的一些快速闪烁。在(慢得多)生产PC上,闪烁是显而易见的,相当丑陋。我的问题是有没有办法通过挂钩事件来计算TListView的刷新次数?然后,我可以在调试时增加变量并在标签上显示变量的值。我尝试了TListView :: OnDrawItem事件,但根本没有调用它。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

尝试这样的事情以避免闪烁:

// 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。

问候。