如何检测表单调整大小的开始和结束?

15
我正在处理一个较大的表单,需要实时绘制。当用户调整表单大小时,我不希望在用户释放鼠标按钮之前应用大小更改到我的图形渲染上,因此只有当用户完成调整大小后才进行渲染大小更改。如何检测这一点并仅在用户完成调整大小后才调整我的渲染尺寸?因为现在,如果我使用表单的 OnResize 事件,它将为鼠标移动的每个像素重新呈现所有内容。
我已经尝试过鼠标按下/松开事件并跟踪这个过程,但是在调整表单大小时不会调用这些事件。
1个回答

25

要检测窗口移动或调整大小是否已经开始,可以捕获 WM_ENTERSIZEMOVE 消息。当用户单击窗口标题栏或调整边框时(使窗口进入移动或调整大小循环),该消息将发送到窗口。

要检测窗口移动或调整大小是否已完成,请捕获 WM_EXITSIZEMOVE 消息。当用户释放窗口的标题栏或调整边框时(使窗口退出移动或调整大小循环),该消息将发送到窗口。

你可以通过在窗体级别声明(和实现)它们来捕获它们中的任何一个:

procedure WMEnterSizeMove(var Message: TMessage); message WM_ENTERSIZEMOVE;
procedure WMExitSizeMove(var Message: TMessage); message WM_EXITSIZEMOVE;

TLama:在FMX中有没有相应的方法来实现这个? - RobertFrank
如果用户精确地点击窗体边框,则会发送WM_ENTERSIZEMOVE消息,但是如果他在窗体边框附近点击,则即使调整大小开始,也不会发送WM_ENTERSIZEMOV消息(请参见图片)。 - Fabrizio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接