在运行时插入控件集非常慢

时间:2011-06-01 05:37:32

标签: delphi user-interface controls delphi-xe

我们有一个销售点应用程序,在这个应用程序中我们有一个滚动框容器。如果卖家选择产品,则会创建新产品行并将其插入滚动框。产品行组件是一个框架 - 文本框,按钮和标签。

但是在运行时将此产品行控件插入滚动框这里有一个小问题。这很慢。我可以看到选择产品如何将edittext组件慢慢地绘制到滚动框中。

我尝试在visibility之前将组件“ScrollBox.InsertControl设置为false并在之后启用它,但它无助于加快速度。”另外我读到了关于DisableAlign / EnableAlign的事情,但我不知道我必须把这行代码放在哪里。

如何加快将此自定义组件插入表单的滚动框容器?

3 个答案:

答案 0 :(得分:9)

TScrollBox没有使用WM_SETREDRAW消息的BeginUpdate / EndUpdate,而是you can get the same effect。我可能会避免使用像LockWindowUpdate这样的重手法。

  SendMessage(ScrollBox1.Handle, WM_SETREDRAW, 0, 0);
  try
    // add controls to scrollbox
    // set scrollbox height
  finally
    SendMessage(ScrollBox1.Handle, WM_SETREDRAW, 1, 0);
    RedrawWindow(ScrollBox1.Handle, nil, 0, RDW_ERASE or RDW_INVALIDATE or RDW_FRAME or RDW_ALLCHILDREN);
  end;

答案 1 :(得分:1)

通常,添加到容器的控件只需要很少的时间。这很可能与创建控件而不是插入有关。

答案 2 :(得分:0)

尝试在try-finally例程中添加控件并启用屏幕更新时禁用屏幕更新。然后,屏幕不必为每个单独的控件更新,而是在放置所有控件时只更新一次。