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 :

Application avec plusieurs fenetres


Sujet :

C++Builder

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Par défaut Application avec plusieurs fenetres
    Bonjour,

    j'aimerais créer une application possédant une fenetre principale avec un menu. Chaque élément du menu provoque l'ouverture d'une seule fiche différente. Cette nouvelle fiche doit rester par-dessus l'autre en laissant le menu visible mais inaccessible. Lorsque je ferme la nouvelle fiche, je reviens sur la fiche principale.

    Voici ce que je fais:

    Le FormStyle des fiches est sur fsNormal. Seul la fiche principal est créée automatiquement, les autres sont des fiches diponibles.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void __fastcall TForm1::Test1Click(TObject *Sender)
    {
    Form2=new TForm2(this);
    Form2->ShowModal();
    delete Form2;
    }
    Est-ce correct?

    Si oui, j'aimerais pouvoir utiliser le bouton réduire de la fenêtre principale même lorsqu'une autre fenêtre de mon application est ouverte pour réduire les deux fenêtres d'un coup. Est-ce faisable?

    Merci d'avance

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 190
    Par défaut
    Bonjour,

    Voici ce que je te propose.

    D'abord, tu mets un TPanel dans ta fiche principale, avec la propriété 'Align' à 'alClient'.
    Ce Panel, s'adapte donc exactement à la zone client de ta fiche principale.

    Tout ce qui est dans ta forme principale, tu le mets dans ce Panel.

    Ainsi, en passant la propriété Enable de ce Panel à FALSE, tout sera desactivé dans ta zone client, tout en ayant un accés aux bouttons de la barre de titre de ton application.

    Ensuite, tu créés une classe pour ta fenêtre 'outil'.

    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
     
    class MyForm : public TForm{
      public:
       bool IsRunning;    // bool utilisé pour sortir de la boucle 'while'
     
      private:
       void __fastcall OnCloseMyForm(TObject *Sender, TCloseAction &Action){
         IsRunning = FALSE;         //on sort de la boucle 'while'
         Action    = caFree;
       }
     
      public:
       __fastcall MyForm(TComponent *Owner):TForm(Owner,0){
         this->FormStyle = fsStayOnTop;           //pour que la fiche reste au premier plan
         this->IsRunning = TRUE;
         this->OnClose   = OnCloseMyForm;
       }
    };
    Dans cette classe, deux choses importantes. D'abord le 'StayOnTop', pour que cette fenêtre reste au premier plan dans ton application.
    Puis, le boolean 'IsRunning', qui servira de test de sorti pour une boucle 'while'.

    Pour afficher ta fenêtre outil, tu utiliseras la fonction 'Show' (et non plus 'ShowModal').
    Une boucle 'while', prenant en compte le dispatch des messages, sera ensuite mise en place pour maintenir la fenêtre affichée.

    Ce qui donnera:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      MyForm *Form2 = new MyForm(Application);
      Form2->Show();                          //On affiche la fiche
      //--> Ici, le disable de ton panel contenu dans la zone cliente de la fiche principale
      while (Form2->IsRunning)                //boucle
        Application->HandleMessage();         //gestion des messages
      //--> Ici, le enable de ton panel
      delete Form2;
    }
    Il faudra aussi penser à empécher de quitter la forme principale, lorsqu'une fenêtre outil est ouverte.
    Cela pourra se faire, par exemple, grâce à l'événement 'OnCloseQuery'.

    Cordialement,

    Benjamin

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Par défaut
    Merci beaucoup pour ta réponse rapide!
    J'ai bien compris le principe mais sans vouloir abuser, peux-tu m'expliquer comment faire pour créer une classe et la fenêtre en découlant SVP?

    Merci

  4. #4
    say
    say est déconnecté
    Membre Expert
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Par défaut
    Citation Envoyé par wap010 Voir le message
    Bonjour,

    j'aimerais créer une application possédant une fenetre principale avec un menu. Chaque élément du menu provoque l'ouverture d'une seule fiche différente. Cette nouvelle fiche doit rester par-dessus l'autre en laissant le menu visible mais inaccessible. Lorsque je ferme la nouvelle fiche, je reviens sur la fiche principale.
    euh...si lorsqu'une fiche est ouverte le menu est inaccessible....ben tu pourras pas ouvrir d'autre fiche si? ou uniquement depuis la nouvelle fiche...
    y'a quelque chose que j'ai pas compris?

    et tu ne veux pas travailler en MDI j'imagine...

    et le fsStayOnTop?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Par défaut
    Bonjour,

    je trouve que ca fait "plus mieux" si le menu est toujours visible mais non accessible mais tu as raison cela n'a aucune utilité
    Pour le MDI, je n'aime pas trop car je souhaite que ma fiche ouverte ne soit pas déplaçable et qu'elle ne possède pas de barre de titres!
    Voici un exemple de fenêtre
    Nom : appli.jpg
Affichages : 82
Taille : 56,6 Ko

  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

    Pour cette fenêtre :
    - fixer les borderIcons à false
    - fixer BorderStyle sur bsNone
    - fixer FormStyle sur fsStayOnTop

    Si on a besoin d'un cadre, on peut y place un TBevel avec Align sur alClient.

    A plus !

  7. #7
    say
    say est déconnecté
    Membre Expert
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Par défaut
    +1

    j'irai même plus loin...
    pour arriver à la présentation que tu montres...je ferais du MDI qd même en maximizant les fenêtres à l'ouverture, gardant ainsi le menu au dessus...et le désactivant qd il faut.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Par défaut
    Je garde la solution de Grosbenji qui me convient mieux et qui fonctionne bien.
    J'ai juste une petite question en plus: En modifiant mon ShowModal() en Show(), lorsqu'une fiche est ouverte, on peut par contre maintenant cliquer sur la fiche principale et ma fiche active perd alors le focus. Y a-t-il moyen d'empecher cela SVP?

    Merci beaucoup

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/02/2008, 19h22
  2. [Compiler] Compiler une application avec plusieurs fichiers m
    Par ploukinet dans le forum MATLAB
    Réponses: 3
    Dernier message: 10/05/2007, 17h34
  3. probleme d'evenements.. avec plusieurs fenetres :(
    Par djynwk dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 18/04/2007, 16h01
  4. Application avec plusieurs interfaces graphiques
    Par Morpheus2144 dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 25/05/2006, 23h29
  5. [MFC]Application avec plusieurs vues
    Par tus01 dans le forum MFC
    Réponses: 2
    Dernier message: 22/02/2006, 16h17

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