我有一个TListView,根据用户从日志文件中选择的日期,我可以添加从零到数百项的任何内容。我使用此代码来防止不必要的刷新:
listEvents.Items.BeginUpdate();
listEvents.Items.Clear();
// Add events
listEvents.Items.EndUpdate();即使如此,在我的快速发展个人电脑上,我可以看到一些快速闪烁的名单。在(慢得多的)生产PC上,闪烁是明显的和相当丑陋的。我的问题是,有什么方法可以通过链接到事件来计算TListView的刷新次数吗?然后,我可以在调试时增加一个变量,并在标签上显示变量的值。我尝试了TListView::OnDrawItem事件,但根本没有调用它。
发布于 2015-04-09 13:46:38
我怀疑您没有使用虚拟列表视图。使用虚拟列表视图方法显示数据。将OwnerData属性设置为true,并在OnData事件中处理显示。这应该能防止闪烁。这方面的伪代码是:
procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem);
begin
Item.Caption := FloatToStr(Item.Index + 1);
Item.SubItems.Add('Your data here');
end;发布于 2015-04-09 15:23:21
尝试这样的方法来避免闪烁:
// 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。
致以问候。
https://stackoverflow.com/questions/29539646
复制相似问题