Only for the default values. When the form's AutoSize or LCLScaling are active the dimensions are calculated later. Use OnActivate or OnShow to be sure that the size of the controls is correct.
I routinely use an artificial "OnAfterShow" triggered by an async event, which won't be called after the message loop is running. However moving source from (an old) Delphi to (recent) Lazarus has turned up something interesting.
On Delphi, an OnAfterShow() doesn't have to return and hence can be used for- as a specific example- handling manually-entered commands in a message window (similar to how early AutoCAD's UI worked, if anybody remembers it).
On Lazarus, it can do last-minute tidying up and then be used to start a TIdleTimer, but has to return promptly. And while the TIdleTimer can retain control without disrupting the main form, any secondary forms (including modal windows and dialog(ue) boxes) are unresponsive unless the IdleTimer event handler returns promptly.
MarkMLl