Hello,

Je rencontre un sérieux problème, que ce soit avec Delphi 2005 P.E. ou Turbo Delphi.

A l'aide d'un bouton, je souhaite remettre à 0 la taille et positions de mes fenêtres, qu'elles soient visibles ou non.

J'utilise ce type de code pour chaque fenêtre :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
  FMain.WindowState := wsNormal;
  FMain.Width  := FMain.Constraints.MinWidth;
  FMain.Height := FMain.Constraints.MinHeight;
  FMain.Top    := (Screen.WorkAreaHeight div 2) - (FMain.Height div 2);
  FMain.Left   := (Screen.WorkAreaWidth div 2) - (FMain.Width div 2);
Si les fenêtres ne sont pas maximisées tout se passe bien. Dans le cas contraire, je suis obligé d'appuyer 2 fois sur mon bouton pour que cela fonctionne.

En débug, j'observe le phénomène suivant (le N° = ligne du code) :

1 - Ok (wsNormal)
2 - WindowState reviens à wsMaximized !!

J'appuie une seconde fois sur le bouton et WindowState reste bien à wsNormal après la ligne 2.

Si je place le FMain.WindowState := wsNormal à la fin, il est mieux pris en compte (pas toujours !), par contre la position de la fenêtre est fausse !

Toujours en débug, la valeur Left est correcte après la dernière instruction ci-dessus et à l'entrée du FMain.onShow mais devient fausse à la sortie du onShow

J'ai reproduit ce problème avec un projet vierge, 2 forms et 1 bouton qui cache/affiche Form2 et un 1 bouton qui lance l'init de la taille et position.

J'y comprend plus rien !!