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

API, COM et SDKs Delphi Discussion :

Rendre une form visible avant de la minimiser


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut Rendre une form visible avant de la minimiser
    Bonjour tout le monde.

    Lors de l'exécution de l'application, je rends la form principale invisible afin qu'on ne la voit pas et que je puisse afficher des informations dans une petite form secondaire.
    Lorsque le traitement est fini, je désirerais pouvoir minimiser l'application.
    Si je ne rends pas la fenetre principale visible avant de minimiser l'application, lorsque qu'elle est relancée par un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShowWindow( aHandle, SW_RESTORE );
    , elle ne se réaffiche pas (car toujours invisible).

    La seule solution que j'ai trouvé serait de la rendre visible juste avant de la minimiser, mais quand on fait ainsi, elle se réaffiche un court instant pour se réduire dans la barre des tâches, ce qui est d'un effet visuel assez désagréable, on pourait croire que l'application bugue.

    J'ai essayé de la rendre visible juste après l'avoir minimisée, mais dans ce cas, lorsqu'on la restaure on ne peut plus la minimiser, ce qui est fort embêtant.

    Je m'arrache les cheveux, j'ai cherché du côté de SendToBack aussi mais ça n'a rien donné.

    Est-ce que quelqu'un a une idée ou a déjà eu ce problème ?
    Merci.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Points : 1 418
    Points
    1 418
    Par défaut
    Bonjour,

    Une solution souvent utilisée consiste à déplacer la fenêtre en dehors de la zone visible de l'écran (comme ceci, on ne la voit plus)


    devYan.

  3. #3
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Oui mais quand l'utilisateur relance l'application, il faut qu'elle soit visible et à la place où il l'a laissée en exécutant.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Points : 1 418
    Points
    1 418
    Par défaut
    Citation Envoyé par WebPac
    Oui mais quand l'utilisateur relance l'application, il faut qu'elle soit visible et à la place où il l'a laissée en exécutant.
    Rien n'empêche de procéder comme suit au démarrage :
    - mémoriser la position de la fenêtre non visible,
    - déplacer la fenêtre en dehors de l'écran,
    - afficher la fenêtre puis la minimiser,
    - replacer la fenêtre aux coordonnées mémorisées.


    devYan.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Bonjour peut en reimplémentant l'éve,ement sys command


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    procedure WMSysCommand(VAR Message: TWMSysCommand); message WM_SYSCOMMAND;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    procedure TFForm.WMSysCommand(var Message: TWMSysCommand);
    begin
      ASetChildActive := False;
      if (((Message.cmdtype and $FFF0)= SC_RESTORE)   then begin
        traitement pour rendre la form visible
      end;
      inherited;
    end;

  6. #6
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Merci pour votre aide.
    Finalement, j'ai pris la solution de devyan, qui est la plus simple et marche sans problème.

    Jean-François, j'ai essayé ta méthode pour ne pas rester bête, mais je ne sais pas quelle est la variable ASetChildActive.
    De plus ça ne marche pas très bien, on dirait que le message n'est pas un SC_RESTORE quand il y a un ShowWindow( aHandle, SW_RESTORE );

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Désolé pour le ASetChildActive, j'ai oublier de l'enlever lorsque j'ai purer le code apres un couper /coller.


    La source est une appli qui fonctionne avec SW_RESTORE, je ne comprend pas pourqoui cela ne fonctionne pas chez vous. Par contre, lors d'e l'envoi de l'ordre, il y a x message SysEvent différents qui passe avant que le SW_RESTORE Soit effectif. Normalement il y a un SW_RESTORE dans le lot.

  8. #8
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Quand l'application reçoit un message SW_RESTORE, est-ce que forcément elle lance l'évènement OnRestore définit sur l'application ?

    Car quand l'application est relancée à partir d'une autre qui lance le ShowWindow, l'évènement OnRestore n'est pas lancé, et c'est pourquoi je dois faire autrement.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Je n'avais pas penser a la 1° fois.
    Autant pour mois. Désolé

  10. #10
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Ce n'est pas grave, je me suis arraché pas mal de cheveux déjà pour trouver une solution.

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

Discussions similaires

  1. Rendre une form plein écran
    Par soso78 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 16/03/2007, 20h45
  2. comment rendre une form une feuilles MDI
    Par NAIMA2 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/01/2007, 20h17
  3. [VBA-E] activer un classeur et rendre une page visible
    Par DonKnacki dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/05/2006, 14h34
  4. rendre une form visible sans lui donner le focus
    Par kchrel dans le forum Access
    Réponses: 4
    Dernier message: 24/01/2006, 15h37
  5. Comment rendre une form transparente à certains endroits ?
    Par ludo5532 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 21/08/2005, 15h28

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