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

C++Builder Discussion :

Rendre invisible une fenetre et aussi sur la bare des taches [FAQ]


Sujet :

C++Builder

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 31
    Points : 25
    Points
    25
    Par défaut Rendre invisible une fenetre et aussi sur la bare des taches
    Salut,

    Voila en gros :

    J'ai une fenetre principal dessus un bouton, en clicquant dessus ca crée dynamiquement une fenetre, alors moi j aimerais qu une fois la fenetre crée, que la fenetre principale devienne invisible. J'ai deja fait en mettant false a Visible de la fenetre principale mais elle est tjs sur la bare des taches et j'aimerais ne plus la voir meme la.

    Merci

  2. #2
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    Merci et mille excuse j avais pourtant regardé...

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    salut,

    Ca ne fonctionne que si je le met ds le constructeur de la fenetre principale. En le mettant dans l evenement click d un bouton ben il ne se passe rien du tout.

    Merci

  5. #5
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    Par défaut
    Bonjour,

    Essaye de rajouter, après l'appel à cette fonction,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SetWindowPos(Handle, 0, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
    Ca devrait forcer la prise en compte des modifications.

    Cordialement,

    Arnaud

  6. #6
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    Par défaut
    En fait, l'astuce que je donne ne fonctionne pas avec cet attribut de fenêtre.

    Un méthode qui fonctionne est :
    dans le source du projet, rajouter une ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       Application->Initialize();
       SetWindowLong(Application->Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
       Application->CreateForm(__classid(TForm1), &Form1);
       Application->Run();
    Par défaut, il n'y aura donc aucun bouton.

    Par la suite, pour affiche ou non une feuille, il faudra s'inspirer de ce code, qui, à chaque passage ajoute ou enlève le bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
       LONG l = GetWindowLong(Handle, GWL_EXSTYLE);
       ShowWindow(Handle, SW_HIDE);
       if (l & WS_EX_APPWINDOW)
       {
          SetWindowLong(Handle,GWL_EXSTYLE,l & (~WS_EX_APPWINDOW));
       }
       else
       {
          SetWindowLong(Handle,GWL_EXSTYLE,l | WS_EX_APPWINDOW);
       }
       ShowWindow(Handle, SW_SHOW);
    Il existe une méthode, moins bourrine, qui consite à utiliser les interfaces COM du Shell.
    Je regarde en ce sens.

    Edit :
    Méthode COM
    il faut :
    • rajouter dans le cpp de la feuille :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
       
      #include <shobjidl.h>
    • commenter les lignes 2189 à 2193 de shobjidl.h
    • commenter les lignes 8085 à 8095 de shobjidl.h
    • utiliser le code suivant pour ajouter la feuille dans la barre des tâches
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
       
         ITaskbarList *pTaskList = NULL;
         HRESULT hr = ::CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_ITaskbarList, (void **)&pTaskList);
         if (SUCCEEDED(hr) && pTaskList != NULL)
         {
            hr = pTaskList->HrInit();
            hr = pTaskList->AddTab(Handle);
            pTaskList->Release();
         }
    • et le suivant pour l'enlever :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
       
         ITaskbarList *pTaskList = NULL;
         HRESULT hr = ::CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_ITaskbarList, (void **)&pTaskList);
         if (SUCCEEDED(hr) && pTaskList != NULL)
         {
            hr = pTaskList->HrInit();
            hr = pTaskList->DeleteTab(Handle);
            pTaskList->Release();
         }


    Voilà, j'espère que cela t'aidera

    Arnaud

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    merci merci je savais pas que c etait aussi compliquer que ca !
    Grand merci bon maintenant je vais tester tout ca, j y passerais peut etre la nuit

Discussions similaires

  1. Réponses: 19
    Dernier message: 20/04/2014, 03h19
  2. interdire a une fenetre d'etre dans la barre des taches
    Par d'Oursse dans le forum Windows
    Réponses: 3
    Dernier message: 01/10/2007, 18h53
  3. rendre invisible une fenetre
    Par khadouja dans le forum Général VBA
    Réponses: 11
    Dernier message: 05/07/2006, 14h53
  4. comment rendre invisible une FormStyle->fsMDIchild
    Par caluloa dans le forum C++Builder
    Réponses: 5
    Dernier message: 16/05/2003, 14h21

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