0

我正在使用 Delphi XE3,并尝试创建一个与 Outlook 类型相同的按摩应用程序,但是当我尝试使用大约 2000 条记录的数据加载 Tscroll 框时,它变得如此缓慢!

Outlook scrollbox 如何在滚动时保持这么多数据而不会变慢或闪烁?

这是我下面的代码,用于用稍后将包含信息的面板填充滚动框。

procedure TForm1.IdThreadComponent1Run(Sender: TIdThreadComponent);
var i: integer;
Pnl : TPanel;

begin
  for i := 1 to 2000 do
    begin
      Pnl := TPanel.Create(Self);
      Pnl.Align := alTop;
      Pnl.parent := scrollbox1;
      Pnl.Caption := inttostr(i);
    end;
   IdThreadComponent1.Active := false;
end;
4

1 回答 1

2

您正在为您的内容使用窗口控件 ( TPanel)。您创建的实例越多,分配和管理的操作系统资源就越多,随着时间的推移,事情变得越慢。为了避免所有这些开销,请改用图形控件,例如TLabel甚至创建您自己的从TGraphicControl.

或者,您可以切换到不同的窗口控件,该控件旨在显示大量数据,例如在虚拟模式下运行TListView或运行。TListBox然后你就不需要TScrollBox了。

顺便说一句,TIdThreadComponent.OnRun事件处理程序在工作线程的上下文中运行,而不是在主线程中。您显示的代码不是线程安全的。TPanel代码需要通过 、 或任何其他线程间同步机制在主线程的上下文中TThread.Synchronize()执行TIdSync。在这种情况下,TIdThreadComponent您显示的代码作为线程变得无用,可以用简单的计时器或自定义窗口消息代替。

于 2013-05-17T16:22:42.523 回答