Identifier des Labels par leur nom dynamique [Résolu]

cs_Jean_Jean 639 Messages postés dimanche 13 août 2006Date d'inscription 5 mai 2016 Dernière intervention - 12 oct. 2006 à 08:17 - Dernière réponse : cs_Jean_Jean 639 Messages postés dimanche 13 août 2006Date d'inscription 5 mai 2016 Dernière intervention
- 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
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
japee 1792 Messages postés vendredi 27 décembre 2002Date d'inscription 12 novembre 2016 Dernière intervention - 12 oct. 2006 à 08:47
3
Merci
Bonjour,

(Components[i] as TLabel).Name

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

Bonne prog'

Merci japee 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 120 internautes ce mois-ci

Commenter la réponse de japee
Meilleure réponse
Loulibier 323 Messages postés jeudi 6 juin 2002Date d'inscription 24 septembre 2008 Dernière intervention - 12 oct. 2006 à 09:30
3
Merci
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.

Merci Loulibier 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 120 internautes ce mois-ci

Commenter la réponse de Loulibier
Meilleure réponse
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 14 oct. 2006 à 08:10
3
Merci
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)

Merci f0xi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 120 internautes ce mois-ci

Commenter la réponse de f0xi
Meilleure réponse
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 15 oct. 2006 à 17:40
3
Merci
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)

Merci f0xi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 120 internautes ce mois-ci

Commenter la réponse de f0xi
cs_Jean_Jean 639 Messages postés dimanche 13 août 2006Date d'inscription 5 mai 2016 Dernière intervention - 12 oct. 2006 à 09:29
0
Merci
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
Commenter la réponse de cs_Jean_Jean
cs_Jean_Jean 639 Messages postés dimanche 13 août 2006Date d'inscription 5 mai 2016 Dernière intervention - 12 oct. 2006 à 09:47
0
Merci
[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
Commenter la réponse de cs_Jean_Jean
cs_Jean_Jean 639 Messages postés dimanche 13 août 2006Date d'inscription 5 mai 2016 Dernière intervention - 14 oct. 2006 à 09:23
0
Merci
@ 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
Commenter la réponse de cs_Jean_Jean
cs_Jean_Jean 639 Messages postés dimanche 13 août 2006Date d'inscription 5 mai 2016 Dernière intervention - 15 oct. 2006 à 22:02
0
Merci
[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
Commenter la réponse de cs_Jean_Jean

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.