3

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

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

所以:我可以依赖一个 TForm在第一次显示时总是触发 OnResize 吗?还是在某些情况下(也许如果窗口不可调整大小,也许如果 Position 属性具有某些值等)在窗口首次显示之前OnResize 可能不会触发?

4

1 回答 1

6

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

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

于 2009-08-06T15:00:51.523 回答