j'ai regardé les liens mais je n'ai rien trouvéEnvoyé par say
concérnant les balises ,je ne les trouves pas ces balises
j'ai regardé les liens mais je n'ai rien trouvéEnvoyé par say
concérnant les balises ,je ne les trouves pas ces balises
tssss...la balise, quand tu rédiges le message : #
un exemple de code qui devrait rouler à peu près :
Edited : copier-coller raté..il y avait une boucle en trop
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 MyFonctionCaptionsGlyphes(TWinControl * Sender) { for(i=0;i<Sender->ControlCount ;i++) { if((AnsiString)Sender->Controls[i]->ClassName() == "TSpeedButton") (dynamic_cast<TSpeedButton*>(Sender->Controls[i]))->Glyph->LoadFromFile("chemin"); else if((AnsiString)Sender->Controls[i]->ClassName() == "TLabel") (dynamic_cast<TLabel *>(Sender->Controls[i]))->Caption="blabla"; else if((AnsiString)Sender->Controls[i]->ClassName() == "TPanel") MyFonctionCaptionsGlyphes(Sender->Controls[i]); } }
Salut !
En premier lieu, j'ai utilisé quelques symboliques :
Ensuite j'ai déclaré deux méthodes membres pour TForm1 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part enum{id_none, id_label, id_panel, id_speedbutton};
Je préfère tester si l'objet hérite d'une classe précise pour avoir une vision plus large.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public: // Déclarations de l'utilisateur void __fastcall Targets(TWinControl *WinControl); int __fastcall GetControlId(TControl *Control);
Ce se serait dommage d'ignorer des objets dérivées de la dite classe...![]()
La méthode suivante est récursive.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 int __fastcall TForm1::GetControlId(TControl *Control) { if(Control->InheritsFrom(__classid(TLabel))) return id_label; if(Control->InheritsFrom(__classid(TPanel))) return id_panel; if(Control->InheritsFrom(__classid(TSpeedButton))) return id_speedbutton; //... return id_none; }
On peut utiliser un switch sur la valeur renvoyée par la méthode GetControlId; on a ainsi une meilleure lisibilité de ce que l'on fait, en lieu et place d'un arbre logique avec ses if et ses else...
Pour le test, j'ai fait :
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 void __fastcall TForm1::Targets(TWinControl *WinControl) { TControl *Control; for(int j = 0; j < WinControl->ControlCount; j++) { Control = WinControl->Controls[j]; //traite d'abord les objets dont le Control est parent if(Control->InheritsFrom(__classid(TWinControl))) { Targets((TWinControl*)Control); } //puis traite le Control switch(GetControlId(Control)) { case id_label : ((TLabel*)Control)->Caption = "Found"; break; case id_panel : ((TPanel*)Control)->Caption = "Found"; break; case id_speedbutton : ((TSpeedButton*)Control)->Caption = "Found"; break; //... } } }
Ce n'est qu'un exemple !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 void __fastcall TForm1::BitBtn1Click(TObject *Sender) { Targets(this); // donc ici la racine n'est autre que Form1 }
A plus !
Pour rentrer les balises de code:Envoyé par aadelfa
Lorsque tu rédiges un message, tu dois avoir un bouton "#" juste au dessus de la zone de saisie, le dernier bouton à droite.
Tu dois avoir une barre d'outils avec G I S (123) (...) etc... et le dernier outil est le "#".
Appuie dessus, cela va insérer une balise de début et une balise de fin dans ton message. Tu as juste à entrer ton code entre ces 2 balises. C'est tout.
Franck
chapeau bas...je m'incline..![]()
![]()
j'avais pas pensé au coup des inherits..![]()
et ben le switch, suis d'accord ..je le fais d'hab mais là c t vite fait (ce qui n'excuse rien, je te l'accorde![]()
Envoyé par henderson
salut
j'ai creé une application ou j'ai mise 2 panels et des controles,mais quand je l'éxécute j'ai une erreur.
expected a file name
merci pour votre aide
allo...y'a quelqu'un????
suis désolé...mais :
- sers à rien de citer tout et n'importe quoi..
- tu ne dis jamais si tu as essayé les solutions qu'on te propose
- tu ne sembles pas du tout chercher par toi même..
fais un effort stp![]()
Envoyé par say
tes solutions non
les autres si
merci quand même
a dieu
alors..je te signale que c'est surtout que je t'ai pas livré une solution clé main...
suis vraiment navré...merci à henderson donc.
mais reconnais que c'etait difficile de savoir où tu en étais.
bonne continuation
P.S : pense au tagsi ce n'est déjà fait merci
Salut !
expected a file name ???![]()
Y' a des jours comme ça .... où rien ne va !!!
Il suffit d'appliquer sur les 2 panels, comme je l'ai montré pour la form.
En effet, un TPanel dérive de TWinControl donc...
A plus !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Targets(Panel1); Targets(Panel2);
Envoyé par henderson
je vais essayer ça
merci
salutEnvoyé par henderson
j'ai essayé et ça marche,mais quand j'insére des images.bmp,mon programme prend du temps pour appliquer ces images.
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 TControl *Control; const char *strSection; AnsiString A; TIniFile *f; AnsiString section; strSection="english"; try { TStringList *lSections = new TStringList(); f = new TIniFile("monfichier.ini"); f->ReadSection(strSection, lSections); for(int j = 0; j < WinControl->ControlCount; j++) { for(int i=0 ; i < lSections->Count ; ++i) { section = lSections->Strings[i]; AnsiString Valeur = f->ReadString(strSection,section,"");//paramètres = Section/Clé/Valeur par défaut Control = WinControl->Controls[j]; //traite d'abord les objets dont le Control est parent if(Control->InheritsFrom(__classid(TWinControl))) { Targets((TWinControl*)Control); } //puis traite le Control switch(GetControlId(Control)) { case id_label : if (((TLabel*)Control)->Name == section) { ((TLabel *)Control)->Caption=Valeur;} break; // case id_panel : if (((TLabel*)Control)->Name == section) // { // ((TPanel*)Control)->Caption = "Found"; break; case id_speedbutton : if (((TSpeedButton*)Control)->Name == section) { ((TSpeedButton*)Control)->Glyph->LoadFromFile(Valeur);} break; //... } } } delete lSections; } __finally { delete f; } }
merci pour tout
salut et merci beaucoup anderson ainsi que tousEnvoyé par henderson
désolé d'avoir oublié de mettre![]()
c un peu lent mais ça marche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 void __fastcall TForm1::BitBtn1Click(TObject *Sender) { Targets(Form1); }![]()
![]()
![]()
Partager