如何检测表单调整大小何时启动和停止?

时间:2012-05-18 00:44:19

标签: delphi resize delphi-xe2

我正在使用一个相当大的表格进行实时绘图。当用户调整表单大小时,我不希望在用户释放鼠标按钮之前对我的图形渲染应用大小更改,因此调整大小已完成。我如何检测到这一点,并且只有在用户完成表单大小调整后才调整渲染大小?因为现在,如果我使用表单的OnResize事件,它将不断重新渲染鼠标移动的每个像素的所有内容。

我尝试过鼠标按下/向上事件并对其进行跟踪,但在调整表单大小时不会调用这些事件。

1 个答案:

答案 0 :(得分:21)

要检测已开始移动或调整大小,请捕获WM_ENTERSIZEMOVE消息。一旦用户单击窗口的标题栏或调整边框(使窗口进入移动或大小调整循环),它就会被发送到窗口。

要检测移动或大小调整已完成,请捕获WM_EXITSIZEMOVE消息。一旦用户释放窗口的标题栏或调整边框(使窗口退出移动或大小调整循环),它就会被发送到窗口。

您可以通过在表单级别声明(并实现)它们来捕获它们中的任何一个:

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