【发布时间】:2010-11-30 01:32:57
【问题描述】:
在调整包含许多控件的表单大小时,由于闪烁,表单看起来很糟糕。有哪些技巧可以让表单大小调整更顺畅?
【问题讨论】:
标签: delphi forms resize flicker smooth
在调整包含许多控件的表单大小时,由于闪烁,表单看起来很糟糕。有哪些技巧可以让表单大小调整更顺畅?
【问题讨论】:
标签: delphi forms resize flicker smooth
procedure TForm1.WMEnterSizeMove(var Message:TWMMove);
begin
Self.DisableAlign;
end;
procedure TForm1.WMExitSizeMove(var Message:TWMMove);
begin
Self.EnableAlign;
end;
【讨论】:
尝试使用 WM_SETREDRAW (not LockWindowUpdate)。
你也可以看看DeferWindowPos。
【讨论】:
DeferWindowPos() 值得在 OnResize 处理程序中进行手动放置测试。
复杂的表单通常由嵌套的面板组成,重绘过程可能会导致闪烁。如果您的项目属于这种情况,则有两个简单的解决方案可能会有所帮助:
FullRepaint。 DoubleBuffered。您不会在对象检查器中找到此属性,因此请将 DoubleBuffered := true; 放入 FormCreate。【讨论】:
DoubleBuffered 以较少的闪烁换取较慢的更新速度,这种效果在大屏幕上可能会很明显,在大屏幕上调整大小可能会变得“跳跃”。
我的解决方法如下:
通过玩这个活动,你会得到一个在你调整大小时会变成空白的表单,但当你“放手”时会整齐地填充自己。
布里
【讨论】:
我通过为每个父级对齐不超过 1 个非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 元素的情况相同。
【讨论】: