Identifier des Labels par leur nom dynamique

Résolu
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 - 12 oct. 2006 à 08:17
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 - 15 oct. 2006 à 22:02
[javascript:Insert_Emoticon('/imgs2/smile.gif');

] Bonjour,
[javascript:Insert_Emoticon('/imgs2/smile_question.gif'); ]  Je voudrais trouver le moyen de ne pas écrire une ligne d'affectation pour les labels 5 à 13 d'une fiche.
[javascript:Insert_Emoticon('/imgs2/smile_blush.gif'); ] J'ai trouvé le moyen de savoir si le composant est un Label
       for i := 0 to pred(ComponentCount) do if Components[i] is TLabel then  with (Components[i] as TLabel) do  Update;
[javascript:Insert_Emoticon('/imgs2/smile_angry.gif'); ] Mais je n'ai pas trouvé le moyen d'identifier précisément un Label. Je ne trouve pas de propriété ou de méthod renvoyant Label13 par exemple...!
      j'ai pourtant souvenir l'avoir déjà fait! 
      Merci à vous!
      Jean_Jean

8 réponses

japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
12 oct. 2006 à 08:47
Bonjour,

(Components[i] as TLabel).Name

(propriété "Name")me semble être ce que tu cherches ?

Bonne prog'
3
Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
12 oct. 2006 à 09:30
Bonjour Jean-Jean,

pour identifier le composant voulu, il suffit de faire :

for i := 5 to 13 do
begin
  if Assigned(FindComponent('Label' + IntToStr(i))) then
    TLabel(FindComponent('Label13' + IntToStr(i))).Update;
end;

Bonne Prog, [;)] Olivier PS : Lorsqu'une réponse vous convient, n'oubliez pas de la valider.
3
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
14 oct. 2006 à 08:10
si tu crée des composant dynamique, utilise plutot des tableaux ou encore des TObjectList.
ce serat plus simple pour les manipuler qu'avec FindCompo ...

<hr size="2" width="100%" />Croc (click me)
3
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
15 oct. 2006 à 17:40
avec un tableau tu peu faire :

si les TLabel sont deja créés :

var
   LabelArray = array[0..n] of TLabel;

procedure TForm1.FormCreate(Sender : TObject);
begin
  LabelArray[0] := Label1;
  LabelArray[1] := Label2;
  LabelArray[2] := Label3;
  LabelArray[3] := Label4;
  ...
end;

si les TLabel ne sont pas existant :

var
   LabelArray = array[0..n] of TLabel;

procedure CreateLabels;
var n : integer;
begin
  for n := 0 to high(LabelArray) do begin
      LabelArray[n] := TLabel.Create(Self);
      with LabelArray[n] do begin
         Left := ..;
         Top  := ..;
         Caption := ..;
         Parent  := ..;
      end;
  end;
end;

procedure FreeLabels;
var n : integer;
begin
  for n := 0 to high(LabelArray) do
      LabelArray[n].Free; // ou FreeAndNil(LabelArray[n]);
end;

procedure TForm1.FormCreate(...);
begin
  CreateLabels;
end;
 
Procedure TForm1.Destroy(...);
begin
  FreeLabels;
end;

<hr size="2" width="100%" />Croc (click me)
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
12 oct. 2006 à 09:29
Bonjour Japee,
Merci pour ta réponse.
OK pour la propriété name!
Mais en vérifiant :
[javascript:Insert_Emoticon('/imgs2/smile.gif'); ]     1. if Components[i] is TLabel then showmessage(Components[i].Name);  fonctionne et liste tous les noms de Labels
[javascript:Insert_Emoticon('/imgs2/smile_sad.gif'); ]     2. showmessage((Components[i] as TLabel).Name); refuse à cause d'un pb de transtypage ! Pourtant name est de type ansistring
[javascript:Insert_Emoticon('/imgs2/smile_tongue.gif'); ]     3. Mais la question est comment en ne faisant pas trop long, affecter de manière itérative, les numéros de Label au nom
                POUR  nLab  =  MonPremier  TO  MonDernier_Concerné  TLabel  FAIRE  TLabelnLab  := valeur;
j'avais fait ça à une époque,mais jene sais plus où c'est!
c'est très pratique
[javascript:Insert_Emoticon('/imgs2/smile.gif'); ]Jean_jean
0
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
12 oct. 2006 à 09:47
[javascript:Insert_Emoticon('/imgs2/smile.gif');

]Merci loulibier, c'est ce que je cherchais.[javascript:Insert_Emoticon('/imgs2/smile.gif'); ]
Je rectifie unepetite erreur dans ton code pour d'éventuels autres lecteurs:
for i := 5 to 13 do
begin
  if Assigned(FindComponent('Label' + IntToStr(i))) then
    TLabel(FindComponent('Label' + IntToStr(i))).Update;
end;
Bien à vous
Jean_jean
0
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
14 oct. 2006 à 09:23
@ Foxi
[javascript:Insert_Emoticon('/imgs2/smile_approve.gif'); ]Je viens de m'apercevoir que mon dernier post n'a pas été envoyé.
[javascript:Insert_Emoticon('/imgs2/smile.gif'); ]OK pour l'instruction FindCompo ... qui effectivement me parait un peu lourd! Par ailleurs, je ne devrais pas avoir besoin de <gras>if Assigned(...</gras>  non plus car en fait les Labels existent et ne sont pas créés dynamiquement.
[javascript:Insert_Emoticon('/imgs2/smile.gif'); ]OK, je note tableaux ou TObjectList pour la création dynamique. Je crois qu'il y a pas mal d'exemple sur le site.
Je voulais simplement économiser des lignes de codes, ce qui ne veut pas dire gain à l'éxécution!
Bon en tout cas, ce tuto m'emmène plus loin que je ne le pensais. c'est pour moi, l'occasion de me réapproprier les bonnes méthodes. On verra peut-être dans une 2ème version, car jai presque fini dans sa version simple qui aidera certains débutants.
Je l'ai fait aussi pour un des aspects d'une appli plus complexe en cours.

Bien à toi.
Jean_jean
0
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
15 oct. 2006 à 22:02
[javascript:Insert_Emoticon('/imgs2/smile.gif');

]
[javascript:Insert_Emoticon('/imgs2/smile_tongue.gif');

]Ho qu'il est bon ce Foxi!
[javascript:Insert_Emoticon('/imgs2/smile_cool.gif'); ]D'avoir des professeurs comme ça, ça donne envie de bien travailler n'est pas?
[javascript:Insert_Emoticon('/imgs2/smile_wink.gif'); ]Bon, je n'ai pas le choix.
Je n'avais jamais pensé à cette solution! Jaime bien ce genre de truc: propre, optimisé, simple!...
D'ailleurs, je me dis que je ne suis pas pressé et j'ai décidé de faire une gestion mémoire en plus! Pas pour les labels, mais pour un stockage de données importante dans un stringgrid.
Donc, on va essayer de bien transformer l'idée.
Que j'aimerai avoir 20 ans de moins pour la programmation. Je découvre les posibilités du code. Génail!!!
[javascript:Insert_Emoticon('/imgs2/smile.gif'); ]D'ailleurs j'ai une suggestion à faire aux administrateurs du site, car malgré la richesse des codes existants et ma visite de sites similaires, celui-ci me parait avoir une spécificité que l'on pourrait booster pour attirer encore des codes qui au regard du nombre d'abonnés reste modeste, malgré les énormes richesses contenus, j'en suis sûr dans les tiroirs de certains. Mais je la réserve dans un autre post.
[javascript:Insert_Emoticon('/imgs2/smile_shock.gif'); ]Bonne nuit et merci encore Foxi.
Jean_jean
0
Rejoignez-nous