我们有一个销售点应用程序,在这个应用程序中我们有一个滚动框容器。如果卖家选择产品,则会创建新产品行并将其插入滚动框。产品行组件是一个框架 - 文本框,按钮和标签。
但是在运行时将此产品行控件插入滚动框这里有一个小问题。这很慢。我可以看到选择产品如何将edittext组件慢慢地绘制到滚动框中。
我尝试在visibility
之前将组件“ScrollBox.InsertControl
设置为false并在之后启用它,但它无助于加快速度。”另外我读到了关于DisableAlign / EnableAlign的事情,但我不知道我必须把这行代码放在哪里。
如何加快将此自定义组件插入表单的滚动框容器?
答案 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例程中添加控件并启用屏幕更新时禁用屏幕更新。然后,屏幕不必为每个单独的控件更新,而是在放置所有控件时只更新一次。