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 :

Comment assigner le contenu d'un "Edit" à un onglet d'un "TabControl" ?


Sujet :

C++Builder

  1. #21
    Expert confirmé

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Alors remplace la par une TStringList *

  2. #22
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut
    Au plus simple, j'ai fait comme ceci :

    - dans le constructeur de ma Form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
     
    	for(int i=0;i<10;i++)
    	{
    		Tableau[i].Combo2 = new TStrings *;
     
    	}
     
    }
    avec l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [BCC32 Erreur] UPageControl.cpp(19): E2034 Impossible de convertir 'TStrings * *' en 'TStrings *'
    - dans le OnChange du TabControl :
    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
     
    void __fastcall TForm1::TabControl1Change(TObject *Sender)
    {
     
    		Edit2->Text = Tableau[TabControl1->TabIndex].edit2 ;
    		Edit3->Text = Tableau[TabControl1->TabIndex].edit3 ;
     
            ComboBox1->Clear();
     
    		for(int i=0;i<Tableau[TabControl1->TabIndex].Combo2.Count;i++)
    		{
    			ComboBox1->Items->Add(Tableau[TabControl1->TabIndex].Combo2->String[i]);
    		}
     
    }
    avec les erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [BCC32 Erreur] UPageControl.cpp(43): E2294 Structure nécessaire sur le côté gauche de . ou .*
    [BCC32 Erreur] UPageControl.cpp(45): E2316 'String' n'est pas un membre de 'TStrings'

    - dans le OnChange du ComboBox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void __fastcall TForm1::ComboBox1Change(TObject *Sender)
    {
     
    	Tableau[TabControl1->TabIndex].Combo2->Clear();
    	for(int i=0;i<ComboBox1->Count;i++)
    	{
    		Tableau[TabControl1->TabIndex].Combo2->Add(ComboBox1->Items->String[i]);
    	}
     
    }
    avec les erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [BCC32 Erreur] UPageControl.cpp(76): E2316 'Count' n'est pas un membre de 'TComboBox'
    [BCC32 Erreur] UPageControl.cpp(78): E2316 'String' n'est pas un membre de 'TStrings'
    Je ne vois pas comment faire !!!

  3. #23
    Expert confirmé

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Dans la classe :
    - dans le constructeur de ta Form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
     
        for(int i=0;i<10;i++)
        {
            Tableau[i].Combo2 = new TStringsList;
     
        }
     
    }
    - dans le OnChange du TabControl :
    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
     
    void __fastcall TForm1::TabControl1Change(TObject *Sender)
    {
     
            Edit2->Text = Tableau[TabControl1->TabIndex].edit2 ;
            Edit3->Text = Tableau[TabControl1->TabIndex].edit3 ;
     
            ComboBox1->Clear();
     
            for(int i=0;i<Tableau[TabControl1->TabIndex].Combo2->Count;i++)
            {
                ComboBox1->Items->Add(Tableau[TabControl1->TabIndex].Combo2->Strings[i]);
            }
     
    }
    - dans le OnChange du ComboBox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void __fastcall TForm1::ComboBox1Change(TObject *Sender)
    {
     
        Tableau[TabControl1->TabIndex].Combo2->Clear();
        for(int i=0;i<ComboBox1->Items->Count;i++)
        {
            Tableau[TabControl1->TabIndex].Combo2->Add(ComboBox1->Items->Strings[i]);
        }
     
    }

  4. #24
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut
    ok merci Pottiez, ça compile mais lorsque je change d'onglet, le texte du ComboBox est effacé (il n'y a plus rien à l'intérieur) !!!

  5. #25
    Expert confirmé

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Oui, c'est parce qu'il faut que tu remette le code avec la variable Combo1 de type AnsiString pour la propriété Text

  6. #26
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut
    oui, c'est ce que j'ai fait, mais c'est pareil :

    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
     
    void __fastcall TForm1::TabControl1Change(TObject *Sender)
    {
     
    		Edit2->Text = Tableau[TabControl1->TabIndex].edit2 ;
    		Edit3->Text = Tableau[TabControl1->TabIndex].edit3 ;
     
            ComboBox1->Clear();
     
    		ComboBox1->Text = Tableau[TabControl1->TabIndex].Combo1;
     
    		for(int i=0;i<Tableau[TabControl1->TabIndex].Combo2->Count;i++)
    		{
    			ComboBox1->Items->Add(Tableau[TabControl1->TabIndex].Combo2->Strings[i]);
    		}
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void __fastcall TForm1::ComboBox1Change(TObject *Sender)
    {
     
    	Tableau[TabControl1->TabIndex].Combo1 = ComboBox1->Text;
     
    	Tableau[TabControl1->TabIndex].Combo2->Clear();
    	for(int i=0;i<ComboBox1->Items->Count;i++)
    	{
    		Tableau[TabControl1->TabIndex].Combo2->Add(ComboBox1->Items->Strings[i]);
    	}
     
    }

  7. #27
    Expert confirmé

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Essaye plutôt dans cette ordre la :
    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
     
    void __fastcall TForm1::TabControl1Change(TObject *Sender)
    {
     
            Edit2->Text = Tableau[TabControl1->TabIndex].edit2 ;
            Edit3->Text = Tableau[TabControl1->TabIndex].edit3 ;
     
            ComboBox1->Clear();
     
            for(int i=0;i<Tableau[TabControl1->TabIndex].Combo2->Count;i++)
            {
                ComboBox1->Items->Add(Tableau[TabControl1->TabIndex].Combo2->Strings[i]);
            }
     
            ComboBox1->Text = Tableau[TabControl1->TabIndex].Combo1;
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void __fastcall TForm1::ComboBox1Change(TObject *Sender)
    {
     
        Tableau[TabControl1->TabIndex].Combo1 = ComboBox1->Text;
     
        Tableau[TabControl1->TabIndex].Combo2->Clear();
        for(int i=0;i<ComboBox1->Items->Count;i++)
        {
            Tableau[TabControl1->TabIndex].Combo2->Add(ComboBox1->Items->Strings[i]);
        }
     
    }

  8. #28
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut
    Marche toujours pas !!!

    Je ne comprend pas pourquoi ...

  9. #29
    Expert confirmé

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    La je suis désolé mais je ne voit pas non plus pourquoi, mais le meilleurs moyen pour toi de voir ce qui ce passe c'est de déboguer en mettant des point d'arrêt

  10. #30
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut
    Bonjour,

    j'ai un autre problème :

    dans un thread, des données arrivent tout les x temps et s'ouvre à chaque fois un fichier (TStringList) pour récupérer l'heure de la venue des dernières données pour l'afficher dans un "Edit". Ces données viennent de plusieurs sources ayant chacune un numéro de série différent (une Tab d'un TabControl situé sur ma Form par numéro série).

    J'arrive à afficher l'heure mais quand je change d'onglet, le contenu de "l'Edit" de l'heure s'efface !!!

    J'ai fait comme ceci :

    - dans mon thread.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AnsiString Tableau[20];
    - dans mon thread.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    //Afficher dernière prise de mesures
    struct tm *Time;
    time_t DataHeure = StrToInt(leFichier->Strings[0]);
    Time = localtime(&DataHeure);
    AnsiString Heure;
    AnsiString laDate;
     
    Tableau[FormClient->JvgTabControlFlotteurs->TabIndex] = Heure.sprintf("%02d h %02d min", Time->tm_hour, Time->tm_min);
    FormClient->EditHeure->Text = Tableau[FormClient->JvgTabControlFlotteurs->TabIndex] ;
    - dans le .cpp de ma Form (onChange du TabControl) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FormClient->EditHeure->Text =  Tableau[FormClient->JvgTabControlFlotteurs->TabIndex];
    Comment puis-je faire pour que les valeurs soient gardées en mémoire lorsque je change d'onglets ???

  11. #31
    Expert confirmé

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Salut,
    comme pour tout les edit, tu ajoute une variable dans ta classe de sauvegarde, ici de type AnsiString vu que la propriété Text est un AnsiString.
    Lorsque tu change le Text du edit tu l'enregistre également dans la variable correspondante de l'onglet courant (dans Tableau) et lors du OnChange du TabControle tu remet cette variable dans le TEdit

  12. #32
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut
    Salut,
    comme pour tout les edit, tu ajoute une variable dans ta classe de sauvegarde, ici de type AnsiString vu que la propriété Text est un AnsiString.
    Lorsque tu change le Text du edit tu l'enregistre également dans la variable correspondante de l'onglet courant (dans Tableau) et lors du OnChange du TabControle tu remet cette variable dans le TEdit
    Ok pottiez, quand tu perles de "classe de sauvegarde", tu parles de ma classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class saveTabSheet{
    public :
     
      AnsiString editDate;
      AnsiString editHeure;
     
     
    };

  13. #33
    Expert confirmé

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Oui

  14. #34
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut
    J'ai effectué tout les changements et ça ne fonctionne toujours pas : lorsque je change d'onglet, le contenu de l'EditHeure est vide, puis je repasse sur l'autre onglet et le contenu de l'EditHeure est vide aussi !!!!

    Comment ça se fait ???

  15. #35
    Membre Expert

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

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

    Comme la propriété Tabs est du type TStrings, il est possible de lier un objet à chaque item (Strings) à l'aide de la propriété Objects.
    Supposons maintenant que l'on travaille sans aucun soucis d'économie des moyens, alors on peut attacher à chaque tab son propre TEdit (qui vont s'empiler les uns sur les autres) :

    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
     
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    TEdit *Edit;
    //Je suppose ici que le TabIndex est par défaut à 0
    int max = TabControl1->Tabs->Count-1;
    for(int j = max; j >= 0 ; j--)
        {
        Edit = new TEdit(this);
        Edit->Parent = this;
        Edit->Text = TabControl1->Tabs->Strings[j];
        Edit->SetBounds(10,20,80,23);
        TabControl1->Tabs->Objects[j] = Edit;
        }
    }
    //--
    void __fastcall TForm1::TabControl1Change(TObject *Sender)
    {
    int n = TabControl1->TabIndex;
    ((TEdit*)TabControl1->Tabs->Objects[n])->BringToFront();
    }
    //--
    Si on devait rajouter un Tab dynamiquement on le ferait avec AddObject.
    Voir l'aide pour TStrings::AddObject.

    A plus !

  16. #36
    Expert confirmé

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    As mon avis la meilleur solution c'est d'enregistrer dans tes variables dans l'évènement OnChanging du TTabControl (au lieu de chaque évènement OnChange des composant à enregistrer)

  17. #37
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut
    Bonjour, je suis arrivé à faire ce que je voulais !

    Je voulais savoir comment attribué des attributs "Font" pour les onglets actifs car à chaque fois que je donne un attribut de "Font" pour un onglet, il le fait pour ceux qui sont passifs !!!

  18. #38
    Expert confirmé

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Salut, il me semble que tu ne peut pas affecter une Font à un onglet particulier, si tu change la Font, tu la change pour tout les onglets

  19. #39
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut
    Et bien c'est bizarre car je mets l'écriture des onglets de couleur bleu et en gras et quand je lance l'application, si j'ai par exemple 2 onglets, celui qui est inactif va être écrit en bleu et en gras alors que celui qui est actif va être écrit en noir standard (et c'est toujours comme ça) !!!!


  20. #40
    Expert confirmé

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    C'est parce qu'il doit y avoir une propriété qui permet de mettre en évidence l'onglet sélectionné, il te reste à voir si c'est paramétrable ou non

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/05/2010, 04h36
  2. comment affecter le contenu d'un Edit vers DBGrid
    Par nn2009 dans le forum Débuter
    Réponses: 7
    Dernier message: 06/01/2010, 12h33
  3. Réponses: 6
    Dernier message: 06/05/2009, 18h45
  4. Comment copier le contenu d'un Edit dans un autre Edit ?
    Par petitclem dans le forum C++Builder
    Réponses: 4
    Dernier message: 17/04/2009, 17h12
  5. [VB.Net]Comment assigner contenu variable> nom variable ?
    Par jazz matazz dans le forum VB.NET
    Réponses: 4
    Dernier message: 03/02/2006, 18h28

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