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 :

Griser une fenêtre en arrière plan


Sujet :

C++Builder

Vue hybride

kurkaine Griser une fenêtre en arrière... 31/07/2006, 14h28
ero-sennin Salut, Bonne question, je... 31/07/2006, 15h25
kurkaine Ca reste une solution 01/08/2006, 08h01
kurkaine A la limite, si quelqu'un... 01/08/2006, 08h43
henderson Salut ! Peut-être en... 01/08/2006, 12h15
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Par défaut Griser une fenêtre en arrière plan
    Bonjour,

    Quelqu'un à déjà essayer de griser les fenêtres en arrière plan ? J'aimerai assombrir les fenêtres qui sont en arrière plan afin de ne pas surcharger mon application avec des fenêtres superposé.


    Merchiche

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Salut,

    Bonne question, je ne sais pas y répondre lol.
    Ce que je fais, pour éviter d'avoir trop de fenêtre à l'écran, soit je détruis la fiche si j'en ai plus besoin, ou soit je mets false à la propriété visible de la Form.
    Après tu peux afficher une fenêtre via un ShowModal, ce qui a pour conséquence d'empêcher à l'utilisateur aux autres fiches. Seul la fiche qui vient d'être appelée via le ShowModal est "utilisable".

    Enfin bref, je ne crois pas que je réponds à ta question donc j'arrête la discussion ici

    @ +

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Par défaut Ca reste une solution
    Effectivement, j'utiliserai ta technique si vraiment je ne trouve pas comment faire pour griser les fenêtres. Mais je suis sûr que c'est possible, vu que sous certains environnements (windev par ex) cette fonction de grisage est activé par défaut.

    Si quelqu'un à une idée...

    PS: je ne peux pas détruire les fenetres, puisque c'est une appli mdi, qui appel une fenetre d'insertion, puis confirmation... En fait, j'ai au plus trois ou quatre étage" .

  4. #4
    Membre éclairé
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Par défaut
    A la limite, si quelqu'un sait comment appliquer un masque à une fenêtre afin de griser cette fenêtre (par l'utilisation d'une image...) je pourrais programmer une fonction de grisage.

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Peut-être en essayant de surcharger la méthode TCustomForm::PaintWindow qui se présente comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    virtual void __fastcall PaintWindow(HDC DC);
    Il suffit donc de déclarer la nouvelle méthode dans la classe dérivée (la MDIForm) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void __fastcall PaintWindow(HDC DC);
    A ce stade, on aura donc deux méthodes qui vont coexister :
    - la première relève de la classe TCustomForm
    - le deuxième relève de la classe dérivée de TCustomForm : la MDIForm

    Si c'est possible (donc aussi simple que ça...), la surcharge devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void __fastcall TForm...::PaintWindow(HDC DC)
    {
    if(Form1->ActiveMDIChild == this)
        {
        TCustomForm::PaintWindow(DC); // fait le travail normal de dessin
        }
    else
        {
        //... a faire mais j'en sais pas plus pour l'instant...
        }
    }
    C'est juste une idée parce que je n'ai pas le temps pour l'instant de tester et donc d'aller plus loin... !

    A plus !

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    J'ai testé ce que je pensais être une astuce... hélas, à première vue.... !

    Voici ce que tu peux faire :

    - Ajouter une propriété dans la class des MDIChild

    - Affecter le code suivant à l'événement OnPaint de chaque MDIChild, ici pour ma TForm2 et j'ai fait pareil pour ma TForm3, chacune étant doté de composants divers...

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    void __fastcall TForm2::FormPaint(TObject *Sender)
    {
    if(Form1->ActiveMDIChild == this)
        {
        if(Color != ActiveColor)
            {
            Color = ActiveColor;
            for(int j = 0; j < ControlCount; j++)
                {
                Controls[j]->Visible = true;
                }
            for(int j = 0; j < Form1->MDIChildCount; j++)
                {
                if(Form1->ActiveMDIChild != Form1->MDIChildren[j])
                    {
                    Form1->MDIChildren[j]->Repaint();
                    }
                }
            }
        }
    else
        {
        if(Color != clGray)
            {
            Color = clGray;
            for(int j = 0; j < ControlCount; j++)
                {
                Controls[j]->Visible = false;
                }
            }
        }
    }
    - Dans le constructeur de chaque MDIChild rajouter l'initialisation de la propriété ActiveColor :

    J'ai pris comme couleur le clGray (gris foncé) pour les MDIChild inactives.

    Ne pas oublier d'inclure le header de la fiche MDIForm dans l'unité des fiches enfants (MDIChild)

    En attendant et à défaut d'avoir plus simple... (c'est un simple premier jet)

    A plus !

Discussions similaires

  1. Capturer l'image d'une fenêtre en arrière plan
    Par Etanne dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 09/06/2013, 01h29
  2. Bouger la souris sur une fenêtre en arrière plan
    Par youtpout978 dans le forum C#
    Réponses: 4
    Dernier message: 26/06/2011, 13h13
  3. comment lancer une fenètre en arrièr plan
    Par moon93 dans le forum wxPython
    Réponses: 2
    Dernier message: 16/07/2007, 09h25
  4. Griser une fenêtre en arrière plan
    Par kurkaine dans le forum Delphi
    Réponses: 58
    Dernier message: 10/08/2006, 09h31

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