Array of Tlabel ?

Résolu
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 - 31 août 2005 à 15:27
neodelphi Messages postés 442 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 11 août 2008 - 2 sept. 2005 à 19:19
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

neodelphi Messages postés 442 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 11 août 2008
31 août 2005 à 19:41
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
3
neodelphi Messages postés 442 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 11 août 2008
2 sept. 2005 à 19:19
Ils sont dégommés.

neodelphi
3
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
31 août 2005 à 23:20
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 ?
0
neodelphi Messages postés 442 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 11 août 2008
1 sept. 2005 à 00:02
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
0

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

Posez votre question
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
1 sept. 2005 à 10:49
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 !
0
neodelphi Messages postés 442 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 11 août 2008
1 sept. 2005 à 19:23
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
0
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
1 sept. 2005 à 21:59
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
0
neodelphi Messages postés 442 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 11 août 2008
1 sept. 2005 à 23:24
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
0
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
2 sept. 2005 à 10:47
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 !
0
Rejoignez-nous