Будет ли форма Delphi всегда запускать OnResize при отображении? - PullRequest
3 голосов
/ 06 августа 2009

Если я создаю новую форму Delphi, перехватываю ее событие OnResize и запускаю приложение, OnResize запускается перед отображением окна. Чего я не знаю, так это всегда будет происходить для любого окна.

(Для тех, кто знаком с Windows API, я проследил его до вызова ShowWindow в TCustomForm.ShowingChanged (строка Forms.pas 5503 в Delphi 2007), который, по-видимому, вызывает WM_SIZE ... по крайней мере, для новое окно без других установленных свойств. Я не видел документированного, что ShowWindow всегда запускает WM_SIZE, поэтому я не знаю, могу ли я рассчитывать на это или нет.)

Итак: Могу ли я полагаться на TForm всегда при запуске OnResize при первом его отображении? Или есть обстоятельства (возможно, если окно не изменяемого размера, возможно, если свойство Position) имеет определенные значения и т. д.) где OnResize может не срабатывать до первого показа окна?

1 Ответ

6 голосов
/ 06 августа 2009

Нет, это событие не всегда срабатывает при отображении формы, в зависимости от таких вещей, как BorderStyle. Например, он запускается при запуске для bsSingle, но не для bsDialog.

Это легко проверить. Просто добавьте код регистрации в событие OnResize основной формы, измените BorderStyle и запустите ваше приложение.

...