【问题标题】:How to detect when form resizing starts and stops?如何检测表单调整大小何时开始和停止?
【发布时间】:2012-05-25 14:20:37
【问题描述】:

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

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

【问题讨论】:

    标签: delphi resize delphi-xe2


    【解决方案1】:

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

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

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

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

    【讨论】:

    • TLama:在 FMX 中是否有等效的方法?
    • 如果用户精确点击表单的边框,WM_ENTERSIZEMOVE 会被发送,但如果他在表单的边框附近点击,WM_ENTERSIZEMOV 不会发送,即使开始调整大小(请参阅@987654323 @图片)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多