15

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

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

4

1 回答 1

25

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

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

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

procedure WMEnterSizeMove(var Message: TMessage); message WM_ENTERSIZEMOVE;
procedure WMExitSizeMove(var Message: TMessage); message WM_EXITSIZEMOVE;
于 2012-05-18T01:07:54.413 回答