首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计数刷新到TListView

计数刷新到TListView
EN

Stack Overflow用户
提问于 2015-04-09 13:19:32
回答 2查看 431关注 0票数 0

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

代码语言:javascript
复制
listEvents.Items.BeginUpdate();
listEvents.Items.Clear();
// Add events
listEvents.Items.EndUpdate();

即使如此,在我的快速发展个人电脑上,我可以看到一些快速闪烁的名单。在(慢得多的)生产PC上,闪烁是明显的和相当丑陋的。我的问题是,有什么方法可以通过链接到事件来计算TListView的刷新次数吗?然后,我可以在调试时增加一个变量,并在标签上显示变量的值。我尝试了TListView::OnDrawItem事件,但根本没有调用它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-09 13:46:38

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

代码语言:javascript
复制
procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem);
begin
  Item.Caption := FloatToStr(Item.Index + 1);
  Item.SubItems.Add('Your data here');
end;
票数 1
EN

Stack Overflow用户

发布于 2015-04-09 15:23:21

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

代码语言:javascript
复制
// 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。

致以问候。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29539646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档