Utiliser les composants par leurs numéros

Soyez le premier à donner votre avis sur cette source.

Vue 4 476 fois - Téléchargée 604 fois

Description

Le principe :
1. Parcourir tous les composants d'une forme.
2. Y choisir le composant voulu et l'inscrire dans un listbox avec son numéro. Le ListBox doit avoir Sorted:=True et les composants nommés 001,002,003... De cette façon, l'item 0 est égal au composant 001 et ainsi de suite. Les composants non désirés dans le tableau doivent commencer par un X.
3. En partant de la fin du ListBox, on efface les composants commençant par un X. Il ne reste que les composants à inscrirent dans un tableau.
4. Avec une boucle, On inscrit les numéros des composants dans un tableau.
5. Il ne reste plus qu'à se servir des composants par leurs numéros. Ex : Components[0,0].Visible:=false;
6. En démarrant cette routine à chaque démarrage de la forme principale de votre application, vos composants retrouveront leurs numéros même si vous ajoutez ou retirez un ou plusieurs composants du même type.

Source / Exemple :


procedure TForm1.Composant();
var i:integer;
    Labelx:TLabel; 
    Image:Timage;
    Button:TButton;
begin
  // Pour les images //
  ListBoxArray.Clear;
  for i:=0 to ComponentCount-1 do
  begin
    if Components[i] is TImage then
    begin
      Image:=Components[i] as TImage;
      ListBoxArray.Items.Add(Image.name+' -'+inttostr(i));
    end;
  end;
  for i:=ListBoxArray.Count-1 downto 0 do
  begin
    if LeftStr(ListBoxArray.Items.Strings[i],1)='X' then ListBoxArray.Items.Delete(i);
  end;
  for i:=0 to ListBoxArray.Count-1 do
  begin
    ListBoxArray.Items[i]:=Droite('-',ListBoxArray.Items[i]);
    CompoNos[0,i]:=StrToInt(ListBoxArray.Items[i]);
  end;
end;

//Voir le démo dans le zip pour mieux comprendre.

Conclusion :


Ce que vous devez faire :
1. Nommer les composants à placer dans le tableau
Ex : Label001, Label002... Image001, Image002...
Nommer les autres XLabel, XImage nom choisi
Ex : XLabelTitre,XImageTitre.
Si un type de composant n'est pas choisi pour le tableau, vous n'avez pas besoin de le nommer en commençant par X.
2. Ajouter un ListBox caché avec Stored:=True.
3. Ajouter dans les Uses : StrUtils. Pour fonction Droite().
4. Créer un tableau CompoNos:array[0..2,0..10] of integer;
0..2 = 3 types de composant.
0..10 = 10 TImage, TLabel et TBuuton maximum.
[0,0] = Valeur du premier composant TImage.
[1,0] = Valeur du premier composant TLabel.
[2,0] = Valeur du premier composant TButton.
5. Ajouter la fonction droite(substr: string; s: string): string; Pour choisir seulement ce qui est à droite du «-» soit le numéros du composant.
6. Ajouter la procédure TForm1.Composant(); Celle qui est dans la démo.
7. Ajouté dans FormActivate Composant(); Pour activer la routine au démarrage de la forme principale.

Pour appeler un composant :
TImage(Components[CompoNos[0,0]]).Picture:=NIL;
TLabel(Components[CompoNos[1,0]]).Caption:='Test';
TLabel(Components[CompoNos[1,0]]).Color:=clRed;

Codes Sources

A voir également

Ajouter un commentaire Commentaires
JulioDelphi
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
13
17 févr. 2010 à 08:39
J'oubliais, je vois aussi un sacré nombre de boucle et des boucles qui se resemblent pouur les TImage, TLabel, TButton.
Je veux le faire avec en plus des TPanel, TSpinEdit, TMemo, TRichEdit, TLabeledEdit, TComboBox, TListBox, TBevel, TSpeedButton, TBitBtn, TCheckBox, TGroupBox, TRadioBox.
Tu peux me montrer le code à créer ? J'ai peur là ... :s
Encore : FormActivate = Activation de la fiche et non pas démarrage de l'aaplication.
Et : Une ListBox cachée ? Euh ... un TStringList alors ! Quand tu as besoin d'une variable de type "string", tu crées un TEdit caché ? Non, bah voilà, même réflexion ici ^^
JulioDelphi
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
13
17 févr. 2010 à 08:11
Hello
je viens de regarder la unit1.pas et mon avis perso est que c'est beaucoup de bazar pour pas grand chose et aussi une perte d lisibilité.
Les composants "mal" nommés déjà c'est pas gérable, pas pro au possible.
Je vois 3 boutons sur la fiche, 3 fois tu dupliques du code, donc ta solution fait aussi perdre en légèreté ? Pourquoi dupliquer ?
Quand je lis ton code, je me dis qu'avec les TAGs ont fait la même chose, je ne parviens pas à voir où c'est plus "simple" ou "rapide".
Puis CompoNos est un tableau "en dur" donc les composants créés dynamiquement bah ... on oublie, puis CompoNos[2,8] < C'est quel compos ça ? Ce n'est pas parlant, on se perds la dedans.
Si j'ai un poil de temps ce midi, je DL la source et je reposte.
bye
cs_Dany3
Messages postés
13
Date d'inscription
mercredi 26 juin 2002
Statut
Membre
Dernière intervention
26 juin 2003

16 févr. 2010 à 15:50
Bonjour,

Bacterius c'est vrai qu'il n'y a pas grand-chose à dire sur les TAGS.

Yannba cela fonctionne très bien avec ta boucle, mais si tu ajoutes un composant même autre qu'un EDIT, ta boucle ne correspondra plus, car les numéros de composant changeront. C'est ce qu'évite ma source.

Malheureusement, je crois que mon idée ne passe pas, à mon avis, les TAGS ne sont pas la solution pour créer un tableau de composant à 3 dimensions comme dans ma source.

Dany
yannba
Messages postés
133
Date d'inscription
mercredi 4 janvier 2006
Statut
Membre
Dernière intervention
7 septembre 2010

16 févr. 2010 à 14:35
Bonjour,

J'ai effectivement utiliser ceci :
for i:=1 to 20 do
TEdit(FindComponent['Edit'+inttostr(i)]).text:=''
et ca marche nickel ...
Merci ca ma mit sur la piste
yvessimon
Messages postés
637
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
9 janvier 2017

16 févr. 2010 à 13:36
Bonjour

fait une boucle sur TEdit(nomdescomposant).clear

un test est necessaire s'il y a d'autre composant

Salutations
Afficher les 9 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.