我正在一个相当大的表单上进行一些实时绘图。当用户调整表单大小时,我不想将大小更改应用于图形渲染,直到用户释放鼠标按钮,从而完成调整大小。如何检测到这一点,并仅在用户完成调整表单大小后才调整渲染大小?因为现在,如果我使用表单的 OnResize
事件,它将不断地重新渲染鼠标移动的每个像素的所有内容。
我尝试过鼠标向下/向上事件并跟踪它,但在调整表单大小时不会调用这些事件。
最佳答案
要检测移动或调整大小是否已开始,请捕获 WM_ENTERSIZEMOVE
信息。一旦用户单击窗口的标题栏或大小调整边框(使窗口进入移动或大小调整循环),它就会被发送到窗口。
要检测移动或调整大小是否已完成,请捕获 WM_EXITSIZEMOVE
信息。一旦用户释放窗口的标题栏或大小调整边框(使窗口退出移动或大小调整循环),它就会被发送到窗口。
您可以通过在表单级别声明(和实现)它们来捕获它们中的任何一个:
procedure WMEnterSizeMove(var Message: TMessage); message WM_ENTERSIZEMOVE;
procedure WMExitSizeMove(var Message: TMessage); message WM_EXITSIZEMOVE;
关于delphi - 如何检测表单大小调整何时开始和停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10645339/