调整具有许多控件的表单大小时,由于闪烁,表单看起来很糟糕。有哪些技巧可以使表格大小调整更平滑?
问问题
11882 次
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
复杂的表格通常由嵌套的面板组成,重绘过程可能会导致闪烁。如果您的项目属于这种情况,那么有两个简单的解决方案可能会有所帮助:
- 禁用
FullRepaint
面板上的属性。 DoubleBuffered
在表单上启用该属性。您不会在对象检查器中找到此属性,因此请放入DoubleBuffered := true;
FormCreate。
于 2009-09-21T12:33:54.993 回答
1
我的解决方法如下:
- 在窗体的“OnResize”事件中,有一个例程来隐藏所有子控件,然后启动一个时间约为 500 毫秒的计时器。
- 当计时器触发时,禁用它,然后将所有子控件设置为可见。
通过玩这个活动,你会得到一个表格,当你调整它的大小时它会变成空白,但当你“放手”时会整齐地填充自己。
布里
于 2009-09-21T14:12:54.813 回答
0
我通过对齐每个父级不超过1 个非组件来避免闪烁,始终与 a (例如 a )alClient
配对以包含所有其他组件。将它们分组在无边框的面板中。alClient
TPanel
假设您要对齐三件事:alLeft
和alTop
用于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 回答