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

evi*_*one 4 delphi user-interface controls delphi-xe

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

但是在运行时将此产品行控件插入到滚动框中会出现一些问题.这很慢.我可以看到选择产品如何将edittext组件慢慢地绘制到滚动框中.

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

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

Bru*_*Gee 11

TScrollBox没有BeginUpdate/EndUpdate,但您可以使用WM_SETREDRAW消息获得相同的效果.我可能会避免使用像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;
Run Code Online (Sandbox Code Playgroud)