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 :

RAD Builder , Probleme


Sujet :

C++Builder

  1. #21
    Membre chevronné
    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
    Points : 1 911
    Points
    1 911
    Par défaut
    Je ne comprends pas : vous dites que votre fenêtre est créée sur clic d'un bouton par logiciel (c'est-à-dire qu'elle est créée à l'exécution du programme), à partir de là, je ne vois pas comment vous allez rajouter un bouton à la main.

    Vous ne pouvez pas procéder ainsi.

    Est-il nécessaire de créer la fenêtre par logiciel ? Si oui, il faut le faire proprement, sinon, créer-la à la conception.

    À bientôt
    Gilles

  2. #22
    Membre chevronné
    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
    Points : 1 911
    Points
    1 911
    Par défaut
    Bon, je vois ce que vous voulez dire.

    Vous créez cette fenêtre à la conception (donc elle est prête) et sur clic du bouton de la forme principale vous faites ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    Application->CreateForm(__classid(TForm2), &Form2);
    Form2->Show();
    }
    Sur clic du bouton de la forme secondaire, vous faites ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void __fastcall TForm2::Button1Click(TObject *Sender)
    {
    int PasX = Width/198;
    int PasY = Height/283;
     
    Canvas->Rectangle(0,0,PasX,PasY);
    Canvas->Font->Size = 11;
    Canvas->TextOut(30*PasX,50*PasY,"test :");
    Canvas->TextOut(100*PasX,50*PasY,Form1->Edit1->Text);
    }
    Ce code est correct et doit marcher (j'ai gardé les noms par défaut, Form1, Form2 et Edit1). Je n'aime pas trop utiliser Application->CreateForm qui est du domaine plutôt de C++ Builder lui-même mais ça marche ainsi, la fenêtre sera créée telle que conçue.

    Repartez d'un projet vide, ça marche immédiatement.

    À bientôt
    Gilles

  3. #23
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Points : 65
    Points
    65
    Par défaut
    jai exactement ce code .... je sais que ce code marche marche mais chez moi non ...

  4. #24
    Membre chevronné
    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
    Points : 1 911
    Points
    1 911
    Par défaut
    Repartez d'un projet vierge et reconstruisez le tout (j'ai mis deux minutes à le faire !), il se peut que votre site soit déstabilisé. Utilisez un nouveau répertoire (un répertoire par projet nouveau)

    Laissez les noms par défaut pour ne pas compliquer inutilement dans un premier temps et constater que ça marche.

    Sinon, je ne vois pas puisque c'est impossible.

    À bientôt
    Gilles

  5. #25
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Points : 65
    Points
    65
    Par défaut
    Bon , jai fais ce que tu as dis , refaire tout le projet ....
    ca m'a pris 3h , pour avoir a la fin la meme erreur

  6. #26
    Membre chevronné
    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
    Points : 1 911
    Points
    1 911
    Par défaut
    Citation Envoyé par Pugebad Voir le message
    ca m'a pris 3h
    Comment ça peut vous prendre trois heures ?

    Il y a deux composants et un include, c'est insensé.

    À bientôt
    Gilles

  7. #27
    Membre chevronné
    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
    Points : 1 911
    Points
    1 911
    Par défaut
    Je précise que si vous utilisez ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application->CreateForm(__classid(TForm2), &Form2);
    pour créer votre deuxième forme, il faut alors supprimer cette instruction du projet.
    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
    #include <vcl.h>
    #pragma hdrstop
    //----------------------------------------
    USEFORM("Unit1.cpp", Form1);
    USEFORM("Unit2.cpp", Form2);
    //--------------------------------------------
    WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
    {
       try
       {
           Application->Initialize();
           Application->CreateForm(__classid(TForm1), &Form1);
          // Application->CreateForm(__classid(TForm2), &Form2); <-- à virer
           Application->Run();
       }
    C'est pour cette raison qu'on ne procède pas ainsi quand on utilise une autre forme. Soit vous laissez le code de C++ Builder et vous jouez sur la visibilité, soit vous créez vous-même la forme.

    À bientôt
    Gilles

  8. #28
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Points : 65
    Points
    65
    Par défaut
    Et si elle n'y ait pas ???

  9. #29
    Membre chevronné
    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
    Points : 1 911
    Points
    1 911
    Par défaut
    Partez d'un projet vierge, mettez le bouton et le TEDit, créez l'autre forme, mettez le bouton sur cette forme, enlevez le create du projet (puisque vous voulez le mettre vous même), mettez l'include, copiez-collez les fragments de programme qui correspondent aux événements, laissez les noms par défaut des composants, il y en a pour trois minutes, si ça ne marche pas c'est que votre C++ Builder est daubé.

    À bientôt
    Gilles

  10. #30
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Points : 65
    Points
    65
    Par défaut
    Jai ré essayerrrrrrrrrrrrrrrrrrrr et ça marche dans ce cas , ( avec 2 fiches )
    et meme en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Application->CreateForm(__classid(TForm2), &Form2);
    Form2->Show();
    ça a supprimer tout seul la ligne que tu me disais dans le cpp du projet ...


    Jai une question , mon proejt etant en MDI jai plusieurs fiches ....
    La fiche parent et des autres donc la feuille principale quon parle ici
    ( ou Form5 ) ...

    C'est fiche qui permet "d'ouvrir" la feuille secondaire est la fiche "fille" de
    Form1 , la feuille parent de la feuille principale

    La feuille secondaire et principale , sont donc toutes les 2 des fiches filles
    d'une autre fiche
    or la fiche principale ouvre la secondaire ....

    Estce que le probleme vient de là ?

    estce possible d'avir une feuille fille d'une autre et parent d'une autre a la fois ?

    si oui comment faire ?


    Merci d'avance

  11. #31
    Membre chevronné
    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
    Points : 1 911
    Points
    1 911
    Par défaut
    En principe, on ne procède pas ainsi.

    On crée la fenêtre mère puis les fenêtres filles à la conception et on joue sur leur visiblité sans utiliser l'instruction Application->CreateForm. C++ Builder, crée toutes les fenêtres à l'ouverture de l'application.

    Comme les fenêtres filles sont visibles par défaut, une solution consiste à rendre certaines invisibles au moment du OnShow de la forme principale.

    Ensuite, sur clic d'un bouton, on rend les fenêtres visibles.

    À bientôt
    Gilles

  12. #32
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Points : 65
    Points
    65
    Par défaut
    oui , en allant dans projet , puis option on peut regler cela
    donc comment je peux faire alors ?

  13. #33
    Membre chevronné
    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
    Points : 1 911
    Points
    1 911
    Par défaut
    1. Entrer dans C++ Builder
    2. Sauver le projet Unit1 et Projet1 dans un répertoire nouveau
    3. Mettre la propriété FormStyle à fsMDIForm de la forme principale
    4. Créer une nouvelle fiche Form2 et sauver l’unité Unit2
    5. Mettre la propriété FormStyle à fsMDIChild de Form2
    6. Mettre un bouton et un TEdit sur Form2
    7. Créer une nouvelle fiche Form3 et sauver l’unité Unit3
    8. Mettre la propriété FormStyle à fsMDIChild de Form3
    9. Mettre un bouton sur Form3
    10. À ce stade, compilez/exécutez, il y a bien une fenêtre principale et deux fenêtres enfants.
    11. Vous dites que c’est le bouton de Form2 qui crée Form3. Donc Form3 doit ne pas être visible à l’exécution. Allez dans Unit2 et incluez l’en-tête d’unité Unit3 (puisque qu’Unit2 doit communiquer avec Unit3)
    12. Au moment du OnClik du bouton de Form2, on crée cette fenêtre. Supprimez du projet l’instruction Application->CreateForm(__classid(TForm3), &Form3); et faites un copier-coller dans l’événement du bouton de Form2.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void __fastcall TForm2::Button1Click(TObject *Sender)
    {
    Application->CreateForm(__classid(TForm3), &Form3);
    }
    Vous pouvez effectivement procéder ainsi car les fenêtres enfants sont toujours visibles (oubli de ma part). Une autre méthode est de la créer logiciellement mais ça revient au même.

    13. Compiler/exécuter, vous constatez que ça marche, le bouton de Form2 crée Form3.
    14. Allez dans Unit3 et incluez l’en-tête d’unité Unit2 puisque qu’Unit3 doit communiquer avec Unit2 (car c’est le TEdit de Form2 qui est affiché dans Form3)
    15. Au moment du OnClik du bouton de Form3, afficher.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void __fastcall TForm3::Button1Click(TObject *Sender)
    {
    int PasX = Width/198;
    int PasY = Height/283;
     
    Canvas->Rectangle(0,0,PasX,PasY);
    Canvas->Font->Size = 11;
    Canvas->TextOut(30*PasX,50*PasY,"test :");
    Canvas->TextOut(100*PasX,50*PasY,Form2->Edit1->Text);
    }
    16. Compiler/exécuter et constater que ça marche.

    À bientôt
    Gilles

  14. #34
    Membre chevronné
    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
    Points : 1 911
    Points
    1 911
    Par défaut
    Je précise qu'on n'utilise pas en principe une MDI de cette façon.

    Une MDI signifie que vous créez plusieurs fenêtres de même type, comme Word par exemple. C'est pourquoi, la fenêtre enfant créée est toujours visible (erreur de ma part précédemment) car il ne fait aucun sens de créer un document et ne de pas le prendre visible.

    Dans votre cas, il faudrait créer une application normale (FormStyle=fsNormal, qui est la valeur par défaut) et les autres fenêtres ne seraient pas enfants de la fenêtre principale. Dans ces conditions, on peut jouer avec leur visibilité (contrairement aux fenêtres enfants), ce qui évite d'avoir à bidouiller le code créé automatiquement de C++ Builder.

    Mais c'est sans doute un exercice.

    À bientôt
    Gilles

  15. #35
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Points : 65
    Points
    65
    Par défaut
    Re bonjour jai un nouveau probleme sur mon proet jamais rencontré avant



    please

  16. #36
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    C'est jolie ce screen, mais ca ne nous dit pas grand chose

    à quel moment de ton execution cela se produit, regarde avec la pile d'appel, etc...
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  17. #37
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Points : 65
    Points
    65
    Par défaut
    il se produit pas le tout le temps et lors d'un clic sur un bouton , qui ouvre une autre fiche fille

    peux tu meclairer ,parce que cest la 1ere fois que je vois ca , et comprend pas?

  18. #38
    Membre chevronné
    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
    Points : 1 911
    Points
    1 911
    Par défaut
    Essayons par programme.

    Entrez dans C++ Builder, sauvez le projet dans un répertoire nouveau prévu pour ce test. Mettez FormStyle de Form1 à fsMDIForm.

    Dans la classe principale, déclarez deux pointeurs de fenêtres, deux pointeurs de boutons, un pointeur de TEdit et deux déclarations d’événement OnClick pour les boutons.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class TForm1 : public TForm
    {
    __published:	// Composants gérés par l'EDI
       void __fastcall FormShow(TObject *Sender);
    private:	// Déclarations de l'utilisateur
    public:		// Déclarations de l'utilisateur
    TForm *pF1, *pF2;
    TButton *pB1, *pB2;
    TEdit *pEd;
    
    __fastcall TForm1(TComponent* Owner);
    void __fastcall ClicB1(TObject*);
    void __fastcall ClicB2(TObject*);
    };
    Dans l’événement OnShow de Form1, on crée la première fenêtre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void __fastcall TForm1::FormShow(TObject *Sender)
    {
    pF1=new TForm(Application);
    pF1->FormStyle=fsMDIChild;
    pB1=new TButton(pF1);
    pB1->Parent=pF1;
    pB1->Left=10;
    pB1->Top=10;
    pB1->Caption="Go !";
    pB1->OnClick=ClicB1;
    }
    Ensuite, on programme les deux événements OnClick des boutons.

    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
    void __fastcall TForm1::ClicB1(TObject *Sender)
    {
    pF2=new TForm(Application);
    pF2->FormStyle=fsMDIChild;
    pB2=new TButton(pF2);
    pB2->Parent=pF2;
    pB2->Left=150;
    pB2->Top=10;
    pB2->Caption="Affiche";
    pB2->OnClick=ClicB2;
    pEd=new TEdit(pF2);
    pEd->Parent=pF2;
    pEd->Left=250;
    pEd->Top=10;
    pEd->Text="Bonjour";
    }
    //-------------------------------------
    void __fastcall TForm1::ClicB2(TObject *Sender)
    {
    int PasX = Width/198;
    int PasY = Height/283;
     
    Canvas->Rectangle(0,0,PasX,PasY);
    Canvas->Font->Size = 11;
    pF2->Canvas->TextOut(30*PasX,50*PasY,"test :");
    pF2->Canvas->TextOut(100*PasX,50*PasY,pEd->Text);
    }
    À bientôt
    Gilles

  19. #39
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Points : 65
    Points
    65
    Par défaut
    ah ... on peut pas faire autrement , meme si je comprend cest pas la methode quon ma dise donc cest bizarre

  20. #40
    Membre chevronné
    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
    Points : 1 911
    Points
    1 911
    Par défaut
    Citation Envoyé par Pugebad Voir le message
    ah ... on peut pas faire autrement
    Puisque vous n'arrivez pas à mettre au point votre propre méthode pour des raisons que j'ignore, je vous en propose une autre.

    En principe, on n'utilise pas le MDI de cette façon, vos fenêtres devraient être libres, ce qui permettrait de jouer sur leur visibilité alors qu'avec des fenêtres enfants, on ne peut pas.

    À bientôt
    Gilles

Discussions similaires

  1. ouverture d'une appli Builder Probleme violation d'acces
    Par jamescook dans le forum C++Builder
    Réponses: 0
    Dernier message: 07/01/2008, 09h39
  2. Réponses: 1
    Dernier message: 16/10/2007, 18h15
  3. RaveReport & C# Builder probleme de "using"
    Par SubZero2 dans le forum Rave
    Réponses: 2
    Dernier message: 13/12/2006, 09h20
  4. petit probleme avec l'éditeur de builder
    Par qZheneton dans le forum C++Builder
    Réponses: 2
    Dernier message: 28/10/2004, 16h19
  5. Probleme C++Builder et Mysql
    Par noname dans le forum C++Builder
    Réponses: 3
    Dernier message: 20/06/2002, 13h40

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