【问题标题】:Will a Delphi form always fire OnResize when it's shown?Delphi 表单在显示时总是会触发 OnResize 吗?
【发布时间】:2009-08-06 14:50:33
【问题描述】:

如果我创建一个新的 Delphi 表单,挂钩其 OnResize 事件并运行应用程序,则 OnResize 在窗口显示之前被触发。我不知道这是否会一直发生,对于任何窗口。

(对于熟悉 Windows API 的任何人,我已将其追溯到 TCustomForm.ShowingChanged 中的 ShowWindow 调用(Delphi 2007 中的 Forms.pas 第 5503 行),这显然触发了 WM_SIZE... 至少,对于一个没有设置其他属性的新窗口。我没有看到它记录 ShowWindow 总是触发WM_SIZE,所以我不知道我是否可以指望这个。)

所以:我可以依靠 TForm always 在首次显示时触发 OnResize 吗? 或者是否存在某些情况(如果窗口不可调整大小,或者如果Position 属性具有某些值,等等)OnResize 可能不会在窗口首次显示之前触发?

【问题讨论】:

    标签: delphi startup vcl onresize


    【解决方案1】:

    不,此事件并不总是在表单显示时触发,具体取决于 BorderStyle 等内容。例如,对于 bsSingle,它会在启动时触发,但对于 bsDialog 则不会。

    很容易测试。只需在主窗体的 OnResize 事件中添加一些日志记录代码,更改 BorderStyle 并运行您的应用程序。

    【讨论】:

    • 我想我必须测试所有可能的属性组合——老实说,我没想到找到一个非 OnResize 案例会这么容易。但很高兴知道答案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    相关资源
    最近更新 更多