Alors remplace la par une TStringList *
Version imprimable
Alors remplace la par une TStringList *
Au plus simple, j'ai fait comme ceci :
- dans le constructeur de ma Form :
avec l'erreur :Code:
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:
1
2 [BCC32 Erreur] UPageControl.cpp(19): E2034 Impossible de convertir 'TStrings * *' en 'TStrings *'
avec les erreurs :Code:
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:
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:
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 !!! 8OCode:
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:TStringList* Combo2;
- dans le OnChange du TabControl :Code:
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:
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:
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) !!! 8O
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 : 8O
Code:
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:
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:
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:
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:
1
2 AnsiString Tableau[20];
- dans le .cpp de ma Form (onChange du TabControl) :Code:
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 ??? 8O :?8O:?Code:
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 :Citation:
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:
1
2
3
4
5
6
7
8
9 class saveTabSheet{ public : AnsiString editDate; AnsiString editHeure; };
Oui
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 !!!! 8O
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:
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 !!! 8O
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) !!!!
8O8O8O8O8O8O8O8O8O8O
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