Bonjour,
comment savoir si un composant label1 créé dynamiquement qu'il existe, pour le détruire ?
c-à-d
un programme qui crée un label dynamiquement et une procedure qui test si label1 existe on le détruit
merci
Version imprimable
Bonjour,
comment savoir si un composant label1 créé dynamiquement qu'il existe, pour le détruire ?
c-à-d
un programme qui crée un label dynamiquement et une procedure qui test si label1 existe on le détruit
merci
Salam,
Je pense que ceci devrait faire l'affaire:
@+ ClaudiusCode:
1
2 if Assigned(Label1) then Label1.Free;
merci pour la réponse,
mais, le probleme c'est que le nom du composant est affecté dynamiquement,
c-à-d
il n'est pas forcement que sont nom est label1
il peut être label2
Salut,
Si tu connais le nom de ton composant, tu peux utiliser FindComponent() ;
Exemple :
Ce qui est en rouge, c'est le Name du label créé dynamiquement. ;)Code:Label:=TLabel(Form1.FindComponent('Label1'));
dabort comment tu crée ton composant, et comment tu lui attribut un nom
(un nom déjà existant :labelx:TLabel)
ou par example
Code:
1
2
3
4
5
6
7
8
9 var i:integer; lab:TLabel; begin i:=1 while Form1.FindComponent('Label'+inttostr(i))<> nil do inc(i); //tu crée le label i end;
voilà comment je créée les composant :
Code:
1
2
3
4
5
6 bnum:=1; lab:= TQRLabel.Create(Self); lab.Parent :=form1; lab.Name :='b'+inttostr(bnum); bnum := bnum +1;
a testéCitation:
Envoyé par ero-sennin
Citation:
Envoyé par ouldfella
Si c'est des labels que tu créés, je pense la ligne en rouge est fausse.
Je mettrai ceci à la place :
Ensuite, pour ta recherche de composant tu fais ceci:Code:lab:= TLabel.Create(Self);
Je pense qu'avec cela tu devrais t'en sortir :)Code:LabelCree:=TLabel(Form1.FindComponent('b1'));
non au fait je suis en trzain de creer des qrlabel donc la ligne en rouge est juste.Citation:
lab:= TQRLabel.Create(Self);
Code:
1
2
3
4
5
6
7
8
9
10 var label:TQRLabel; begin while bnum>0 do begin dec(bnum); Label:=TQRLabel(Form1.FindComponent('b')+inttostr(bnum)); label.free; end; end;
il me signal :Code:
1
2
3
4
5
6
7
8
9 var lbl : TQRLabel ; begin while bnum>0 do begin dec(bnum); Lbl:=TQRLabel(frmprintetatbon.FindComponent('b')+inttostr(bnum)); lbl.free; end;
[Erreur] Unitetatbon.pas(85): Types incompatibles : 'String' et 'TComponent'
sur la ligne :
Ah ok!
Dans ce cas veuillez accepter mes excuses :mrgreen:
Au lieu de TLabel dans le code, tu mets des TQRLabel ;)
Citation:
Envoyé par ouldfella
Je pense que l'erreur vient de la :
Ecrit ceci :Code:Lbl:=TQRLabel(frmprintetatbon.FindComponent('b')+inttostr(bnum));
Tiens nous au courant !Code:Lbl:=TQRLabel(frmprintetatbon.FindComponent('b'+inttostr(bnum)));
Salut!
Pourquoi ne gardes-tu pas une référence sur ces labels (dans un TObjectList par exemple) ?
Je ne suis pas certain d'avoir compris toute la portée de la question mais à mon avis, si tu veux détruire certains labels et pas d'autres, c'est probablement parce que tu détruis une section de l'affichage, je me trompe ? Par exemple, tu créés des TTabSheet dans un TPageControl, tu mets des labels dedans et tu voudrais détruire le TTabSheet ainsi que ce qu'il contient. C'est qqchose du genre ? Si c'est ça, le truc que j'utilise est de passer le TTabSheet comme Owner des TLabels et de détruire uniquement le TTabSheet.
Bon dev!
merci pour tout le monde,
le programme consiste a créer un etat imprimable d'un Bon de laivrison.
quand je click sur le botton 'Apperçu' il m'affiche l'apperçu du bon
sur Quickrep1
si je click sur apperçu de nouveau je doit détruire les labels créés auparavant et recréer de nouveau selon le choix de l'utilisateur le nouveau etat.
Salut!
Je ne connais pas QuickReport mais je ne crois pas que ça soit grave compte tenu du problème ;).
Perso, j'utiliserais le TObjectList.
Déclares toi une variable FObjectList et créé l'objet en utilisant le paramètre "true" du constructeur (ce qui fait en sorte que la liste va "posséder" les objets qu'elle contient).
Quand tu créés tes labels fais quelque chose comme :
Quand tu sais que tu n'as plus besoin des labels fais :Code:
1
2
3
4 monLabel := TLabel.create(nil); //Ajustement des propriétés du label FObjectList.add(monLabel);
Comme la liste "possède" les objets, elle va détruire les labels en même temps.Code:FObjectList.Clear;
Bon dev!
pourqoi les détruire; pourqoi pas simplement changer simplement leur caption????????Citation:
Envoyé par ouldfella
j'ai fais ce code
mais il me signale erreur violation d'accèsCode:
1
2
3
4 monLabel := TLabel.create(nil); //Ajustement des propriétés du label FObjectList.add(monLabel);
je crois qu'il faut oublier FObjectList, sinon c'est des problèmes en plus
en plus si tu sait déjà leur nombre alors pourqoi pas un simple tableau de TLabelCitation:
Envoyé par edam
Code:
1
2
3
4
5
6
7
8
9
10
11 var i:integer; labs:array[1..10] of TQRLabel; begin for i:=1 to 10 do begin labs[i]:=TQRlabel.creat(nil); labs[i].parent:=qreport1;//a vérifier end; end;