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 :

Probl�me de Passage d'un Form � un Autre.


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Invit�(e)
    Invit�(e)
    Par d�faut Probl�me de Passage d'un Form � un Autre.
    Bonjour,

    (Je d�veloppe un logiciel de gestion de note).

    Voila j'explique mon probl�me:

    - j'ai une variable globale int statusWindows;
    - j'ai une classe TForm1 qui contient un TEdit et un Bouton.
    - j'ai une classe TForm2 qui contient plusieurs TEdit ainsi q'un Bouton.

    Avec ma Form1, le TEdit1 r�cupere un Entier (nombre_eleve) et le Bouton envoie l'Entier � cette fonction: Recup();

    Je voudrais faire en sorte que la fonction Recup( ) cr�e une TForm2 dynamique � chaque Fermeture de la TForm2 pr�cedente gr�ce au Bouton du TForm2 cr�e dynamiquement qui correspond � : statusWindows = 0; TForm2 -> Close();

    Donc Je voudrais cr�er des TForm2 dynamique (autant qu'il y a de nombre_eleve) et afficher les une apres les autres quand on clique sur un Bouton.

    Le probl�me c'est que quand la 1ere TForm2 est cr�e et que je clique sur le Bouton pour la fermer et passer � l'autre, rien ne se passe...

    Voici mon code:


    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
    33
    34
     //declarer en global
     
    int statusWindows;
     
    void Recup(int NombreDeleve)
    {
      int i=0;
      char bof[15];
     
    //Fonction Creation Dynamique Fenetre pour chaque eleve !
      for(i=1;i <  NombreDeleve+1;i++)
      {
             TForm2 *F;
             F = new TForm2(Form2);
             // bof = Eleve n° X
             sprintf(bof, "Eleve n° %d", i);
     
            //Caption = bof
            F-> Caption = bof;
     
            //Edit3 -> Numero de l'éleve
            F -> Edit3 -> Text = i;
     
            if  (statusWindows == 0) Fshow(F);
            i++;
       }
    }
     
     
    bool Fshow( TForm2 *x)
    {
                  statusWindows = 1;
                  x -> Show();
    }


    dans TForm2:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     void __fastcall TForm2::Button1Click(TObject *Sender)
    {
    statusWindows = 0;
    Form2->Close();
    }

  2. #2
    Membre Expert
    Avatar de Gilles Lou�se
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Par d�faut
    Votre �nonc� est assez confus, je sais trop que r�pondre.

    Je constate que vos fonctions ne sont pas des m�thodes, ce qui ne se fait pas trop en C++ Builder. Et votre variable g�n�rale devrait plut�t faire partie de la classe principale, ainsi qu'il est d'usage.

    Mais sur le fond, je ne puis r�pondre n'ayant pas tellement compris ce que vous voulez faire.

    Prenez la peine de reformuler et j'essaierai de vous aider.

    � bient�t
    Gilles

  3. #3
    Invit�(e)
    Invit�(e)
    Par d�faut
    Comment pourrais-je d�tecter la fermeture d'une TForm2 cr�e dynamiquement a partir de la TForm1 ?

    Car je voudrais r�cup�rer un Entier sur la TForm1 qui sera le nombre de TForm2 � cr�er dynamiquement.

    Sachant que les TForm2 devront s'afficher les unes apr�s les autres. Comment puis-je faire en sorte que la prochaine TForm2 s'affiche ap�s que la TForm2 pr�c�dente se termine (gr�ce � un ButtonOnClick ou autre...).

    Merci,

  4. #4
    Membre Expert
    Avatar de Gilles Lou�se
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Par d�faut
    Pour d�tecter la fermeture d�une fen�tre cr��e dynamiquement, il faut associ�e la fen�tre cr��e � un �v�nement OnClose en respectant la liste des arguments de ce type de fonction.

    Par exemple, dans la classe principale TForm1, vous d�clarez une variable NbFen (nombre de fen�tres), un pointeur de liste pour les adresses des fen�tres, et deux m�thodes, un pour le clic sur le bouton et l�autre pour la fermeture.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    int NbFen;
    TList *pTL;
     
    void __fastcall BClick(TObject*);
    void __fastcall FClose(TObject*, TCloseAction&);
    On initialise les variables dans le constructeur de la classe principale.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    __fastcall TForm1::TForm1(TComponent* Owner)
       : TForm(Owner)
    {
    pTL=new TList;
    NbFen=0;
    }
    On rend la m�moire du TList au moment du OnDestroy de l�application.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    void __fastcall TForm1::FormDestroy(TObject *Sender)
    {
    delete pTL;
    }
    Admettons que les fen�tres se cr�ent sur clic d�un bouton de Form1. On peut proc�der comme suit :

    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
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    TForm *f;
    TButton *b;
     
    f=new TForm(Application);
    pTL->Add(f);
    f->Visible=true;
    f->Caption="Fenêtre "+IntToStr(++NbFen);
    f->OnClose=FClose;
    b=new TButton(f);
    b->Parent=f;
    b->Caption="GO!";
    b->OnClick=BClick;
    b->Tag=NbFen; 
    }
    Vous voyez qu�on a associ� au clic du bouton notre m�thode BClick et � la fermeture de la fen�tre cr��e notre m�thode FClose, d�clar�es dans la classe principale. Le Tag du bouton contient l�indice incr�ment� de l�item dans la TList. Dans ces conditions, on retrouve facilement son adresse,au moment du clic.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void __fastcall TForm1::BClick(TObject *Sender)
    {
    TForm *f;
    TButton *b;
     
    b=(TButton*)Sender;
    f=(TForm*)pTL->Items[b->Tag-1];
    f->Close();
    }
    Comme le Sender correspond au bouton cliqu� de la fen�tre cr��e dynamiquement, on lit le tag du bouton, l�adresse dans la TList � cet indice d�cr�ment� correspond � l�adresse de la fen�tre en question que l�on ferme. Dans ces conditions, la m�thode FClose de Form1 est appel�e au moment de sa fermeture, vous avez la main et vous faites que ce vous voulez. Notamment vous pourrez �crire Action=caFree pour lib�rer la m�moire correspondant � cette fen�tre si elle dispara�t d�finitivement.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    void __fastcall TForm1::FClose(TObject *Sender, TCloseAction &Action)
    {
    }
    � bient�t
    Gilles

Discussions similaires

  1. R�ponses: 5
    Dernier message: 10/06/2009, 09h29
  2. R�ponses: 2
    Dernier message: 23/11/2008, 14h39
  3. passage d'un form � un autre
    Par totoche dans le forum VB 6 et ant�rieur
    R�ponses: 1
    Dernier message: 15/11/2007, 09h48
  4. R�ponses: 2
    Dernier message: 23/05/2007, 16h47
  5. passage d'une form � l'autre
    Par mat-tech dans le forum Delphi
    R�ponses: 8
    Dernier message: 13/05/2006, 15h15

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