Alors remplace la par une TStringList *
Discussion :
Alors remplace la par une TStringList *
Au plus simple, j'ai fait comme ceci :
- dans le constructeur de ma Form :
avec l'erreur :
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 *; } }
- dans le OnChange du TabControl :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 [BCC32 Erreur] UPageControl.cpp(19): E2034 Impossible de convertir 'TStrings * *' en 'TStrings *'
avec les erreurs :
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]); } }
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 :
avec les erreurs :
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]); } }
Je ne vois pas comment faire !!!
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'![]()
Dans la classe :
- dans le constructeur de ta Form :
Code : Sélectionner tout - Visualiser dans une fenêtre à part TStringList* Combo2;
- 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 __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { for(int i=0;i<10;i++) { Tableau[i].Combo2 = new TStringsList; } }
- 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
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]); } }
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]); } }
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) !!!![]()
Oui, c'est parce qu'il faut que tu remette le code avec la variable Combo1 de type AnsiString pour la propriété Text
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]); } }
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]); } }
Marche toujours pas !!!
Je ne comprend pas pourquoi ...![]()
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![]()
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 :
- dans mon thread.cpp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 AnsiString Tableau[20];
- dans le .cpp de ma Form (onChange du TabControl) :
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] ;
Comment puis-je faire pour que les valeurs soient gardées en mémoire lorsque je change d'onglets ???
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 FormClient->EditHeure->Text = Tableau[FormClient->JvgTabControlFlotteurs->TabIndex];![]()
![]()
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 :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
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; };![]()
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 ???![]()
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) :
Si on devait rajouter un Tab dynamiquement on le ferait avec AddObject.
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(); } //--
Voir l'aide pour TStrings::AddObject.
A plus !
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)
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 !!!![]()
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
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) !!!!
![]()
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
Partager