200 fois la meme chose c'est long -_-

Résolu
Awaking Messages postés 18 Date d'inscription jeudi 19 août 2004 Statut Membre Dernière intervention 23 mai 2005 - 29 août 2004 à 14:12
Awaking Messages postés 18 Date d'inscription jeudi 19 août 2004 Statut Membre Dernière intervention 23 mai 2005 - 29 août 2004 à 15:40
Lut all,
J'essaye de faire un petit jeu en 2d mais je suis bloqué dans sa création, c'est pourquoi je vous demande de l'aide.
Comment est ce que je pourrais faire pour attribuer les memes actions à environ 200 même procedure ? Une peu plus précisement, j'ai une form avec 200 carré de meme taille meme image, tout... sauf leur nom et pour chacun de ces carrés, il faut qu'il se passe qqch quand on clique avec la souris dessus. Je sais pas si vous connaissez un moyen un peu plus rapide que d'écrire 200 fois la même chose ?

3 réponses

cs_saib Messages postés 38 Date d'inscription mercredi 12 mars 2003 Statut Membre Dernière intervention 15 mars 2010
29 août 2004 à 15:34
Petite precision :
Pour faire une action specifique sur le carre sur lequel on clique, dans la pocedure ProcedureCarreClick tu fait les actions sur (Sender as TImage) :

Procedure CarreClick(Sender : TObject);
Begin
(Sender as TImage).Left := (Sender as TImage).Left + 1; // on decale le carre sur lequel on a cliqué de 1 vers la droite
(Sender as TImage).Visible := False // on cache le carre sur lequel on a cliqué

end;

saib
3
cs_saib Messages postés 38 Date d'inscription mercredi 12 mars 2003 Statut Membre Dernière intervention 15 mars 2010
29 août 2004 à 15:29
Salut

il y a 2 solutions :
- Soit tous tes carres sont crees a la conception, auquel cas tu peut tous leur assigner la meme procedure pour l'evenement OnClick (dans le concepteur de fiches)

- Soit tes carres sont crees dynamiquement a l'execution et dans ce cas lors de la creation tu assigne un procedure a l'evenement OnClick :

...
Carre := TImage.Create(Form1);
Carre.OnClick := ProcedureCarreClick;
...

Tu peut egalement le faire dans une boucle apres que tes carres aient crees, mais c'est moins propre:

si tes carre sont des TImage et que leur nom commence toujours par 'Carre' tu peut faire:

For i := 0 to Form1.ComponentCount - 1 do
begin
if Form1.Component[i] is TImage then // on teste si le composant est un TImage
Begin
If MidStr((Form1.Component[i] as Timage).Name, 0, 4) = 'Carre' then // On teste si le nom du TImage commence par 'Carre'
Begin
(Form1.Component[i] as TImage).OnClick := ProcedureCarreOnClick; //On assigne la procedure ProcedureCarreOnClick a l'evenement OnClick du TImage dont le nom commence par 'Carre'
End;
end;
end;

Voila!

saib
0
Awaking Messages postés 18 Date d'inscription jeudi 19 août 2004 Statut Membre Dernière intervention 23 mai 2005
29 août 2004 à 15:40
Merci, jvais tester ca^^
0
Rejoignez-nous