我有一个TListView,根据用户从日志文件中选择的那天,我可以在其中添加任何内容,包括无数项。我使用此代码来防止不必要的刷新:
listEvents.Items.BeginUpdate();
listEvents.Items.Clear();
// Add events
listEvents.Items.EndUpdate();
即便如此,在我的快速开发PC上,我可以看到列表中的一些快速闪烁。在(慢得多)生产PC上,闪烁是显而易见的,相当丑陋。我的问题是有没有办法通过挂钩事件来计算TListView的刷新次数?然后,我可以在调试时增加变量并在标签上显示变量的值。我尝试了TListView :: OnDrawItem事件,但根本没有调用它。
答案 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。
问候。