IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Prob WindowState sur fenêtre cachée


Sujet :

Delphi

  1. #1
    Membre confirmé

    Homme Profil pro
    Chef de Projet ATIC
    Inscrit en
    Novembre 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Chef de Projet ATIC
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 274
    Points : 508
    Points
    508
    Par défaut Prob WindowState sur fenêtre cachée
    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 !!

  2. #2
    Membre confirmé

    Homme Profil pro
    Chef de Projet ATIC
    Inscrit en
    Novembre 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Chef de Projet ATIC
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 274
    Points : 508
    Points
    508
    Par défaut
    Je me répond à moi-même, cela peut toujours servir à d'autres...

    En modifiant le code de cette façon, cela fonctionne à tous les coups, c'est un peu lourd, mais ça fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    var
      WindowPlacement  : TWindowPlacement;
    begin
      WindowPlacement.length:=SizeOf(WindowPlacement);
      WindowPlacement.rcNormalPosition.Left := (Screen.WorkAreaWidth div 2) - (FMain.Constraints.MinWidth div 2);
      WindowPlacement.rcNormalPosition.Top := (Screen.WorkAreaHeight div 2) - (FMain.Constraints.MinHeight div 2);
      WindowPlacement.rcNormalPosition.Bottom := (WindowPlacement.rcNormalPosition.Top) + (FMain.Constraints.MinHeight);
      WindowPlacement.rcNormalPosition.Right := (WindowPlacement.rcNormalPosition.Left) + (FMain.Constraints.MinWidth);
      WindowPlacement.showCmd := SW_HIDE;
      SetWindowPlacement(FMain.Handle, @WindowPlacement);
      FMain.Width  := FMain.Constraints.MinWidth;
      FMain.Height := FMain.Constraints.MinHeight;
      FMain.Top    := WindowPlacement.rcNormalPosition.Top;
      FMain.Left   := WindowPlacement.rcNormalPosition.Left;
      FMain.WindowState := wsNormal;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Simuler un clic de souris sur fenêtre réduite
    Par Costello dans le forum Delphi
    Réponses: 1
    Dernier message: 31/03/2007, 00h25
  2. [DELPHI6] et hook sur fenêtres windows
    Par Desraux dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 27/03/2006, 09h31
  3. Trouver un la handle d'une fenêtre cachée sans FindWindow()
    Par Jean-Philippe Shields dans le forum Windows
    Réponses: 3
    Dernier message: 24/02/2006, 12h08
  4. [C#] Création menu sur fenêtre form
    Par Tips dans le forum Windows Forms
    Réponses: 4
    Dernier message: 10/11/2005, 21h29
  5. Composant TImage sur fenêtre MDI Parent
    Par charles.apollon dans le forum C++Builder
    Réponses: 6
    Dernier message: 10/02/2005, 15h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo