如何让表单更顺畅地调整大小?

时间:2009-09-21 12:05:40

标签: delphi forms resize flicker smooth

当调整具有许多控件的表单时,由于闪烁,表单看起来很糟糕。有什么技巧可以让表单更加流畅?

5 个答案:

答案 0 :(得分:16)

procedure TForm1.WMEnterSizeMove(var Message:TWMMove);
begin
  Self.DisableAlign;
end;

procedure TForm1.WMExitSizeMove(var Message:TWMMove);
begin
  Self.EnableAlign;
end;

答案 1 :(得分:5)

尝试使用WM_SETREDRAW(not LockWindowUpdate)。

您可能还要查看DeferWindowPos

答案 2 :(得分:5)

复杂表单通常由嵌套面板组成,重绘过程可能会导致闪烁。如果您的项目就是这种情况,那么可能帮助有两个简单的解决方案:

  1. 禁用面板上的 FullRepaint 属性。
  2. 在表单上启用属性 DoubleBuffered 。您不会在对象检查器上找到此属性,因此将 DoubleBuffered := true; 放在FormCreate中。

答案 3 :(得分:1)

我已经解决了这个问题:

  1. 在表单的“OnResize”事件中,有一个例程来隐藏所有子控件,然后启动一个大约500毫秒的计时器。
  2. 当计时器触发时,禁用它,然后将所有子控件设置为可见。
  3. 通过玩这个活动,你会得到一个在你调整大小时变成空白的表格,但是当你“放手”时它会整齐地填充。

    业务收益指数

答案 4 :(得分:0)

我通过每个父对齐 1 alClient组件来避免闪烁,始终与alClient(例如TPanel)配对以包含所有其他组件。将它们分组在没有边框的面板中。

假设您要为主视图指定三件事:alLeftalTopalClient。 不要这样做: Form alTop alLeft alClient // your main view

但是将这些嵌入如下: Form alTop alClient // panel to avoid flicker alLeft alClient // your main view

嵌入多个alTop元素的相同故事。