Probleme de label

Signaler
Messages postés
17
Date d'inscription
vendredi 1 octobre 2004
Statut
Membre
Dernière intervention
30 octobre 2007
-
Messages postés
17
Date d'inscription
vendredi 1 octobre 2004
Statut
Membre
Dernière intervention
30 octobre 2007
-
Bien le bonjour je vous explique mon soucis !

J'ai, sur une form, 150 label qui tour à tour seront utilisés. J'aurai voulu indexer tout ces label dans tableau de label :

TbLabel : array [0..150] of Tlabel;

et lorsqu'au form load je rempli mon tableau

TbLabel[0] := label7;
Tblabel[1] := label9;
.....

et au moment d'inserer, j'ai un super beau message d'erreur "Label7" n'est pas un identificateur valide.

D'ou vient cette erreur et comment puis-je y remédier?

Merci d'avance !

14 réponses

Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
119
Pourquoi as-tu besoin de 150 labels ?!!!

Sinon tu les crée à l'execution. Le probleme de ta technique c'est qu'il peut y avoir des conflits dans les noms de composants.
Essaie:
for i := 0 to 150 do
begin
    with TLabel.create () do
    begin
        name := lbl + IntToStr (i); // avec i le numero de composant
        // ici tu remplit d'autre propriétés
    end
end

Mais pour moi si tu a besoin de 150 labels c'est qu'il y a une erreur de conception à la base.
Messages postés
17
Date d'inscription
vendredi 1 octobre 2004
Statut
Membre
Dernière intervention
30 octobre 2007

Je t'explique

Ce test est destiné aux enfants, on a deux frame
une contient le modele et l'autre ou l'enfant dois reproduire.

Donc dans ce test ci , le modele c'est un chemin tracé dans la premiere frame vec quelque arbres en deco

et dans la seconde frame, on a un point de depart, et des fleches de directions et  si l'enfant clic sur l'image la fleche vers le haut et bien je vais deplacé un label precedement crée pour le mettre entre le point d'arrivé et de départ. La frame est en quelque sorte "cadrillé" et je recence donc 48 label pour faire les chemins horizontaux et autant pour les  verticaux

je ne sais pas si c'est la meilleur solution mais etant sous la contrainte de divers delai, j'esssaie d'adopté un bon compromis entre rapidité et qualité sans forcemeent chercher à tout optimisé au Ko de ram pres =)

et donc appart si tu as une autre methode a mon conseiller, j'aimerai pouvoir au chargement de la fenetre , charger tout mes label dans mon tableau .

je reste ouvert à toute suggestion !
Merci
Messages postés
93
Date d'inscription
mardi 11 avril 2006
Statut
Membre
Dernière intervention
4 mars 2009

Sans revenir sur le fait que la solution que tu cherches à mettre en place ne soit pas la meilleure, je ne comprend néanmoins pas pourquoi elle ne fonctionne pas.

Dans quel évènement as-tu codé le remplissage de ton tableau ? Le code est-il dans la même form que tes labels (tu parles de frames à un certain moment) ?

a+
Messages postés
1725
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
11 avril 2021
8
@ Mr7bungle : et comment veux-tu qu'on t'aide si tu ne donnes pas le bout de code qui pose problème ?


Sorti de son contexte, le message d'erreur ne nous éclaire pas puisque dans
l'absolu "Label7" est un nom tout à fait valide acceptable par le
compilateur...
Messages postés
17
Date d'inscription
vendredi 1 octobre 2004
Statut
Membre
Dernière intervention
30 octobre 2007

var :

  TbLabel: array [0..49] of TLabel;
   i :  integer;

begin

procedure remplissage();
begin

for i:=0 to 49 do
    begin
    Tblabel[i] := TLabel.Create(nil);
    Tblabel[i].parent := amd1test5page1;

    end;

  Tblabel[0] := Label7;
  Tblabel[1] := label8;
  Tblabel[2] := label16;

.....

end;
end

Message d'erreur :  identificateur non declaré : label7

et j'ai la meme erreur sur le meme genre de manipulation mais avec des Timages.
Messages postés
17
Date d'inscription
vendredi 1 octobre 2004
Statut
Membre
Dernière intervention
30 octobre 2007

Donc non il n'y a pas de frame c'est juste un carré qui decore.
J'ai codé dans une procedure que j'ai bien declaré, les labels sont bien sur la form.

Le lien que tu m'a donné cirec, la personne code créé dynamiquement ses label ! dans mon cas j'aimerai juste executer une procedure qui rempli le tableau des label deja presents sur la form.

Merci encore !
Messages postés
1725
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
11 avril 2021
8
Vite fait, à priori :

Tblabel[0].Name := Label7;

et tu peux le mettre dans ta boucle.
Messages postés
1725
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
11 avril 2021
8
Vite fait, à priori :

Tblabel[0].Name := 'Label7';

et tu peux le mettre dans ta boucle.
Messages postés
1725
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
11 avril 2021
8
Enfin, ne le mets pas "tel quel" dans la boucle, mais tu vois ce que je veux dire...

Pour reprendre les propos de Japee : ton erreur est normal : tu n'as pas définit la propriété Name de tes Labels.

En fait tu as créé dynamiquement des labels sans leur attribuer de nom. Puis ensuite tu les appelles par leurs noms : imagine que tu n'as pas de nom et que je t'appelle : tu te reconnaitra pas : c'est normal non ? Ben c'est exactement ce qui se passe ici. la solution n'a été donnée par Japee à toi de l'appliquer.

Pardon : la solution t'a été donnée par Japee (Je rectifie ca portait à confusion)
Messages postés
93
Date d'inscription
mardi 11 avril 2006
Statut
Membre
Dernière intervention
4 mars 2009

Ah j'y suis ...

Tu as un certain nombres de labels sur ta form mais ta fonction remplissage ne fait pas partie de ta form !

Tu devrais plutôt avoir :

type
  TForm1 = class(TForm)
    Label7: TLabel;
    Label8: TLabel;
    ...
  private
    TbLabel: array [0..49] of TLabel;
    procedure rempliage();
    ...

procedure TForm1 .remplissage();
begin
  Tblabel[0] : = Label7;
  Tblabel[1] := label8;
  ...
end;

Sinon, je ne vois pas l'intérêt d'initialiser ton tableau si ensuite tu écrases les valeurs créées.
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
37
pas de () quand pas d'arguments !




sinon, pour reagir :

le tableau de label, oui c'est une idée, mais regardez aussi la remarque de DelphiProg ... et il a raison, cela peu amener des problemes, rare, mais ca peu arriver.

150 Labels, de toute façon y'a un probleme. c'est beaucoup trop !

je n'ai pas bien compris le fonctionnement du logiciel ... mais on pourrait aisement remplacer tout ça en dessinant tout ce qu'il faut dans une TPaintBox.
et la, on redescend a 1 objet uniquement.

regarde mes sources Pazzu et MasterMind, tu verras que c'est pas enorme le nombre d'objets sur les fiches :)

Messages postés
17
Date d'inscription
vendredi 1 octobre 2004
Statut
Membre
Dernière intervention
30 octobre 2007

Bien le bonjour désolès pour cette longue absence, mais je suis tombé malade comme un chien et puis j'ai enchaine sur une formation microsoft, ce qui m'a forcé a mettre de côté temporairement se projet. Merci pour toute vos reponses.

Je voulais revenir sur le paintbox, est il possible de definir un composant dans le paintbox? je m'explique:

Est il possible si je dessine un carré dans le paint box de lui attribuer des methodes & procedures?