lefrancais83
Messages postés3Date d'inscriptionmercredi 19 janvier 2005StatutMembreDernière intervention29 avril 2005
-
28 avril 2005 à 15:31
solilog
Messages postés273Date d'inscriptionsamedi 13 juin 2009StatutMembreDernière intervention18 avril 2015
-
10 juil. 2012 à 00:10
Bonjour à tous, voila je suis en btsig 2 mais je connais que treès peu delphi et n'est pas très bon en algo.
Bref, voilà, j ai 40 updowns et 40 images. Je voudrais que lorsque je clique sur updowns ca agit sur l'image correspondant o meme nombre. Je sais comment on fait pour influencer l'image à partir du updown mais j arrive pas a faire en sorte que lorsque je clique sur le updown N j agisse sur le numero N.
Est-il possible de faire en sorte de créer genre une procédure qui créer d autres procédure :
exemple : Tform1.Test(Sender: TObject);
for i:=1 to 40 do
Tform1.(Tupdown(findcomponent('updown'+inttostr(i))).name+'click()')(Sender: TObject);
la je c ca existe pas mais c'est l'idée.
Enfin bref mon bleme, c'est que je n'ai pas envie de recréer une 40 aine de procédure juste pour un chiffre qui change. Donc si quelqu'un a réussi à me comprendre please answer fast.
Loulibier
Messages postés309Date d'inscriptionjeudi 6 juin 2002StatutMembreDernière intervention24 septembre 20082 28 avril 2005 à 16:11
Salut,
Si j'ai bien compris ce que tu cherches à faire, voilà ce que je te propose :
Tu affectes a tous tes updown une valeur de Tag différent correspondant à l'identifiant de ton composant image.
procedure TForm1.OnClick(Sender : TObject);
begin
// pour appliquer ta modification sur l'image voulu il te reste plus qu'a utilisé le findcomponent comme ci-dessous...
TImage( FindComponent('Image' + IntToStr(Sender.Tag))).
end;
reste à appliquer cette procedure à tous les évènement updown que tu as créés.
procedure TForm1.OnCreate(Sender : TObject);
var
i : integer;
begin
for i : = 1 to 40 do
Tupdown( FindComponent('updown'
+ IntToStr(1))).OnClick := OnClick;
end;
En espérant que cela puisse t'aider...
Bonne Prog,
Olivier
PS : Lorsqu'une réponse vous convient, n'oubliez pas de la valider.
lefrancais83
Messages postés3Date d'inscriptionmercredi 19 janvier 2005StatutMembreDernière intervention29 avril 2005 28 avril 2005 à 17:47
Merci, l'idée y est mais Tag, il me fait identifiant non déclaré?!
dans procedure Tform1.FormCreate();
G mis
for l:= 1 to 40 do
begin
Tupdown(findcomponent('updown'+inttostr(l))).Tag:=l;
end;
pour créer les tags mais je ne suis pas sur que ce soit ca (jamais utilisé avant)
et
procedure TForm1.OnClick(Sender : TObject);
var i:integer;
begin // pour appliquer ta modification sur l'image voulu il te reste plus qu'a utilisé le findcomponent comme ci-dessous...
i: =Tupdown(findcomponent('updown'+inttostr(Sender.Tag))).Position;
TImage( FindComponent('Image' + IntToStr(Sender.Tag))).Picture.LoadFromFile(c[i]);
end;
enfin le OnClick n est pas accepté dans les propriété des updown donc va falloir que je clic sur chacun d eux et que j'implémente ces procédures ???
var
i : integer;
begin
for i := 1 to 40 do
begin
with Tupdown( FindComponent('updown'+ IntToStr(1))) do
begin
OnClick := MaProcedureOnClick;
Tag := i ;
end ;
end ;
end;
Loulibier
Messages postés309Date d'inscriptionjeudi 6 juin 2002StatutMembreDernière intervention24 septembre 20082 29 avril 2005 à 09:45
Il est vrai que ce composant comporte un paramètre en plus dans l'évènment OnClick.
Pour le problème du Tag j'ai oublier de transtyper le sender en TUpDown...
exemple :
procedure TForm1.OnClick(Sender : TObject; Button:TUDBtnType);
begin
// pour appliquer ta modification sur l'image voulu il te reste plus qu'a utilisé le findcomponent comme ci-dessous...
TImage( FindComponent('Image' + IntToStr(TUpDown(Sender).Tag))).
end;
reste à appliquer cette procedure à tous les évènement updown que tu as créés.
procedure TForm1.OnCreate(Sender : TObject);
var
i : integer;
begin
for i := 1 to 40 do
Tupdown( FindComponent('updown'
+ IntToStr(1))).OnClick := OnClick;
end;
Bonne Prog,
Olivier
PS : Lorsqu'une réponse vous convient, n'oubliez pas de la valider.
Vous n’avez pas trouvé la réponse que vous recherchez ?
solilog
Messages postés273Date d'inscriptionsamedi 13 juin 2009StatutMembreDernière intervention18 avril 201510 10 juil. 2012 à 00:10
Bonsoir,
J'y mets ma couche, problème sympa.
1 - tu poses tes 40 updowns + 40 images sur ta form.
2 - dans la zone private (ou public) de ta form tu ajoutes
tbl_Updaow : array[1..40] of tUpdowns;
tbl_Image : array[1..40] of tImage;
tbl_xxx : array[1..40] of tCequejeveux;
3 - dans ta proc tForm.create tu fais 1 SEULE FOIS (non 40 x) :-)
var i:integer;
begin
tbl_Updown[1] := updown1;
tblImage[1] := image1
tbl_xxx[1] := Cequejeveux1
tu recommences 2, 3, jusqu'à 40
oui c'est long.
et enfin 1 x
for i:=1 to 40 do tbl_updown[i] := i;
Et maintenant ton prob est résolu, tu as affecté aux elem de tes tableaux les adresses de tes images, updowns et cequejeveux et mis un tag.
4 - tu select 1 bouton Updows et dans sa proc onclick:
var num:integer
begin
num := (sender as tupdown).tag;
tbl_image[num].visible := tbl_Updows[num].down;
un fois le num trouvé par le tag, tu manipules tout via les tableaux.
5 - tu copies CtrlC le nom de la proc qui apparait dans F11 sur onclick
6 - tu selectionnes les 40 Updowns et tu vas leur coller le nom de ta proc CtrlV. Tous executeront la meme proc.
pour résumer, dans ta proc tform.create tu affectes (1x pour toute) aux elements des tableaux les adresses réelles des objets boutons, images et autres et 1 tag (dans un for i:= 1 to max) à tous ceux censés recevoir des évenements (click, dblclick, onenter, ...) et ensuite partout dans ton prog, tu pourras manipuler tout par les tableaux en recherchant le num via le tag du sender:
Pour toute les proc "partagées", onclick, ondblclick, ..., en faire une, selectionner tous les objets identiques et coller dans tous le nom de la proc créée 1 x.
et dans les proc, commencer par rechercher le num par num := (sender as tUpdown).tag.
Ceci est valable pour tout tWincontrol quand on veut les manipuler via des tableaux et pour tous les événements.
Ca devrait aller. Si tu ne t'en sors pas là y a plus rien à faire ... bon courage.