Wenn ich ein 'OnAfterShow' benötige, dann sende ich im Show eine Message per PostMessage an die Form selber und kann dann in
procedure WndProc(var Message: TMessage); override;
darauf reagieren.
Bei OnIdle ist das Problem, das ich mir merken muss, das es das erste OnIdle nach dem Show ist, da OnIdle immer wieder aufgerufen wird, wenn nichts zu tun ist.
Durch das Postmessage am Ende von OnShow werden zunächst noch alle Windows-Messages verarbeitet und dann kommt erst deine eigene 'OnAfterShow', so dass Du sicher sein kannst, dass alle Messages beim Formularanzeigen, wie z.B. die korrekte Anzeige aller Controlls abgeschlossen ist.
Ach..
Und bei OnActivate hatte ich die Probleme, das es manchmal gar nicht aufgerufen wurde oder wenn die Form mit Show statt ShowModal angezeigt wurde bei jedem Formularwechsel wieder aufgerufen wurde..