当Delphi表单显示时,它是否会始终触发OnResize?

Joe*_*ite 3 delphi vcl onresize startup

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

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

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

Bru*_*Gee 6

不,当表单显示时,此事件并不总是触发,具体取决于BorderStyle之类的内容.例如,它在启动时为bsSingle启动,但不对bsDialog启动.

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