2009-08-06 23 views
3

Si je crée un nouveau formulaire Delphi, connectez son événement OnResize et exécutez l'application, OnResize est déclenché avant que la fenêtre s'affiche. Ce que je ne sais pas, c'est si cela arrivera toujours, pour n'importe quelle fenêtre.Un formulaire Delphi déclenchera-t-il toujours OnResize lorsqu'il est affiché?

(Pour toute personne familière avec l'API Windows, je l'ai tracée à l'appel ShowWindow dans TCustomForm.ShowingChanged (Forms.pas ligne 5503 dans Delphi 2007), qui déclenche apparemment un WM_SIZE ... au moins, pour un . nouvelle fenêtre sans autres propriétés de l'ensemble je n'ai pas vu documenté que ShowWindow se déclenche toujours WM_SIZE, donc je ne sais pas si je peux compter sur ce ou non)

donc:. puis-je compter sur un TForm toujours déclencher OnResize quand il est d'abord montré? Ou existe-t-il des circonstances (peut-être si la fenêtre est non redimensionnable, peut-être si la propriété Position a certaines valeurs, etc.) où OnResize peut pas feu avant la première fenêtre?

Répondre

6

Non, cet événement ne se déclenche pas toujours lorsque le formulaire s'affiche, en fonction de choses comme BorderStyle. Par exemple, il se déclenche au démarrage pour bsSingle, mais pas pour bsDialog.

Il est facile à tester. Ajoutez simplement du code de journalisation à l'événement OnResize du formulaire principal, modifiez BorderStyle et exécutez votre application.

+0

Je me suis dit que je devrais tester toutes les combinaisons possibles de propriétés - honnêtement, je ne m'attendais pas à ce qu'il soit aussi facile de trouver un cas non-OnResize. Mais bon de savoir la réponse. Merci! –