21

调整具有许多控件的表单大小时,由于闪烁,表单看起来很糟糕。有哪些技巧可以使表格大小调整更平滑?

4

5 回答 5

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

procedure TForm1.WMExitSizeMove(var Message:TWMMove);
begin
  Self.EnableAlign;
end;
于 2009-09-21T19:54:39.977 回答
5

尝试使用 WM_SETREDRAW (不是LockWindowUpdate)。

您还可以看看DeferWindowPos

于 2009-09-21T12:25:03.113 回答
5

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

  1. 禁用FullRepaint面板上的属性。
  2. DoubleBuffered在表单上启用该属性。您不会在对象检查器中找到此属性,因此请放入DoubleBuffered := true;FormCreate。
于 2009-09-21T12:33:54.993 回答
1

我的解决方法如下:

  1. 在窗体的“OnResize”事件中,有一个例程来隐藏所有子控件,然后启动一个时间约为 500 毫秒的计时器。
  2. 当计时器触发时,禁用它,然后将所有子控件设置为可见。

通过玩这个活动,你会得到一个表格,当你调整它的大小时它会变成空白,但当你“放手”时会整齐地填充自己。

布里

于 2009-09-21T14:12:54.813 回答
0

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

假设您要对齐三件事:alLeftalTop用于alClient主视图。不要这样做: Form alTop alLeft alClient // your main view

而是按如下方式嵌入这些: Form alTop alClient // panel to avoid flicker alLeft alClient // your main view

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

于 2015-09-23T07:26:22.583 回答