Probleme de label

Mr7Bungle Messages postés 17 Date d'inscription vendredi 1 octobre 2004 Statut Membre Dernière intervention 30 octobre 2007 - 5 mars 2007 à 11:51
Mr7Bungle Messages postés 17 Date d'inscription vendredi 1 octobre 2004 Statut Membre Dernière intervention 30 octobre 2007 - 15 mars 2007 à 10:15
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

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
5 mars 2007 à 12:02
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.
0
Mr7Bungle Messages postés 17 Date d'inscription vendredi 1 octobre 2004 Statut Membre Dernière intervention 30 octobre 2007
5 mars 2007 à 12:13
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
0
sylvunix Messages postés 93 Date d'inscription mardi 11 avril 2006 Statut Membre Dernière intervention 4 mars 2009
5 mars 2007 à 13:14
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+
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
5 mars 2007 à 14:06
@ 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...
0

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

Posez votre question
Mr7Bungle Messages postés 17 Date d'inscription vendredi 1 octobre 2004 Statut Membre Dernière intervention 30 octobre 2007
5 mars 2007 à 14:15
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.
0
Mr7Bungle Messages postés 17 Date d'inscription vendredi 1 octobre 2004 Statut Membre Dernière intervention 30 octobre 2007
5 mars 2007 à 14:22
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 !
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
5 mars 2007 à 14:31
Vite fait, à priori :

Tblabel[0].Name := Label7;

et tu peux le mettre dans ta boucle.
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
5 mars 2007 à 14:31
Vite fait, à priori :

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

et tu peux le mettre dans ta boucle.
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
5 mars 2007 à 14:33
Enfin, ne le mets pas "tel quel" dans la boucle, mais tu vois ce que je veux dire...
0
Utilisateur anonyme
5 mars 2007 à 14:40
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.
0
Utilisateur anonyme
5 mars 2007 à 14:41
Pardon : la solution t'a été donnée par Japee (Je rectifie ca portait à confusion)
0
sylvunix Messages postés 93 Date d'inscription mardi 11 avril 2006 Statut Membre Dernière intervention 4 mars 2009
5 mars 2007 à 14:57
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.
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
5 mars 2007 à 17:50
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 :)

0
Mr7Bungle Messages postés 17 Date d'inscription vendredi 1 octobre 2004 Statut Membre Dernière intervention 30 octobre 2007
15 mars 2007 à 10:15
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?
0
Rejoignez-nous