Array of Tlabel ? [Résolu]

Signaler
Messages postés
449
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
-
Messages postés
442
Date d'inscription
jeudi 4 avril 2002
Statut
Membre
Dernière intervention
11 août 2008
-
En fait je recherche une listbox transparente, sans scrollbar et je trouve pas. Donc j'aimerais créer une structure de 7 labels les uns sous les autres, et acceder à ces labels via qqch. du genre LabelArray[i].caption :='blah blah blah'

Déclarer un array[0..6] of tlabels, ca à l'air de passer, je pense que définir leur propriétés en copiant un label invisible qui servirait de template doit marcher, mais je vais avoir besoin du Onclick de chacun, et là je séche....

A l'aide.

9 réponses

Messages postés
442
Date d'inscription
jeudi 4 avril 2002
Statut
Membre
Dernière intervention
11 août 2008

C'est pas compliqué à faire. Il faut comme tu l'as dit déclarer ton array de label. Ensuite, il faut créer tes labels, parceque si tu essaye d'en modifier les propriétés ça va planter !

<HR>
for i:=0 to nombreLabels-1 do
begin
labels[i] := TLabel.Create(nil il me semble);
labels[i].parent := form1;
// Changer aussi la position et tout et tout
end;

<HR>

Ensuite, pour les évènement, tu cré une procedure dans form1 qui prend les meme paramètres que ceux que tu recoit dans l'évènement concerné par un label "normal". Appelons cette procedure LabelOnMouseMove par exemple. Pour ensuite connecter l'évènement à la procedure il te suffit de faire pour un label:

<HR>
form1.labels[xxxx].OnMouseMove := form1.LabelOnMouseMove;

<HR>

neodelphi
Messages postés
442
Date d'inscription
jeudi 4 avril 2002
Statut
Membre
Dernière intervention
11 août 2008

Ils sont dégommés.

neodelphi
Messages postés
449
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
2
Youpi content merci ! Il me manquait la syntaxe du create(nil) et le coup du parent( ca m'apprendra a me lancer dans un la programmation Delphi7 avec juste mes souvenirs de pascal sous unix de l'époque pré-pentium pas mmx)

Je viens detester viteuh fait, ca marche nickel, plus qu'a synchroniser les contenu des 7 labels avec mon array of string, et créer deux boutons pour scroller la chose....

Dis, y a pas moyen de copier toutes les propriétés d'un label (mon template) vers les label[i] d'un seul coup, et ne changer que celles à changer apres, plutot que tout redéclarer à la mimine ?
Messages postés
442
Date d'inscription
jeudi 4 avril 2002
Statut
Membre
Dernière intervention
11 août 2008

Non je ne pense pas que ce soit possible. Mais une boucle te permet de définir les propriétés de tout les labels, donc je voit pas trop le problème...

neodelphi
Messages postés
449
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
2
Effectivement, je viens de tester, la copie compo à compo marche pô. bah, c'est pas grave. Ce qui me gene le plus c'est que dans l'IDE, j'ai rien de visible pour tout bien aligner.. Bah, déja que j'ai aucun bouton (que des régions) dans l'interface, que mes labels soient fantomatiques, finalement c'est pas mal

Ca roole !

gnh !
Messages postés
442
Date d'inscription
jeudi 4 avril 2002
Statut
Membre
Dernière intervention
11 août 2008

La copie d'un composant ne marche pas, et c'est normal:
en delphi (et bien d'autre langages) il y a deux genre de variables:
- les types primitif, ce sont les integer, char, single, boolean...
- les classe: les TLabel, TForm, TObject...

Les types primitifs sont des valeurs en mémoire, très simples en général (nombre par exemple), lorsque tu fait une copie tu copie la valeur.

Pour les classes c'est différent. Ce que contient ta variable n'est pas "la classe", c'est un nombre indiquant où se trouvent les informations de la classe (ses variables par exemple), ce nombre correspond à la position dans la mémoire des ces infos. Par défaut, quand tu as une variable, elle vaut n'importe koi, une valeur aléatoire. Ton objet n'existe pas. Lorsque ensuite tu fait
TLabel.Create(nil);
tu demande au programme d'allouer de la mémoire pour ta classe, de l'espace pour stocké les informations relative à ton objet, c'est ce qu'on appelle créer une instance. Pour ensuite savoir où sont situés les infos, il faut récupérer la valeur:
monLabel := TLabel.create(nil);
Comme ça monLabel contient l'adresse mémoire de ton label. Donc si tu essaye de faire une copie, tu copie l'adresse mémoire, mais pas les infos.

Pour te donner une idée du truc tu peut essayer de créer deux label comme ça. Puis tu copi l'adresse dans label dans l'autre. Ensuite lorsque tu voudra modifier les deux label, tu n'en modifira qu'un seul et toujours le même, parceque tes variables auront la même adresse.

Le danger est de toujours stocker l'adresse des objets que tu cré, car sinon tu est incapable de libérer la mémoire quand tu n'en aura plus besoin, et ça c'est kaka !

neodelphi
Messages postés
449
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
2
Okay. Ce qui est marrant, c'est que je peux copier tout le groupe constraint, ou le groupe font, par exemple.

label1.font:=label2.font, ca ca marche.

N'empeche qu'une fonction CloneRename pour chaque objet ca serait pratique, je trouve.

Enfin merci beaucoup pour ton aide sur l'array of tlabels. Arf
Messages postés
442
Date d'inscription
jeudi 4 avril 2002
Statut
Membre
Dernière intervention
11 août 2008

Clone existe en java, certains y ont pensé avant toi
Si tu peut copier constraint c'est parceque constrainst est come un type primitif (c'est un record, tout comme TPoint).

neodelphi
Messages postés
449
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
2
Autre question dans la foulée, mes tlabels crées en live là, à la fermeture du programme, ils sont dégommés comme n'importe quel autre composant ou bien dois-je les détruire moi-même, histoire de faire propre ?

gnh !