Créer un série de procédures!!!

lefrancais83 Messages postés 3 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 29 avril 2005 - 28 avril 2005 à 15:31
solilog Messages postés 273 Date d'inscription samedi 13 juin 2009 Statut Membre Dernière intervention 18 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.

^^;;

7 réponses

Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
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.

exemple :
updown1.Tag := 1;
updown2.Tag := 2;
updown3.Tag := 3;
.
.
updown40.Tag := 40;

tu implémentes une procedure OnClick comme suit :

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.
0
lefrancais83 Messages postés 3 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 29 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 ???

^^;;
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
28 avril 2005 à 21:11
Attention à la définition du OnClick !!

procedure TForm1.
MaProcedureOnClick( Sender: TObject; Button: TUDBtnType);
begin
TImage( FindComponent('Image' + IntToStr(Sender.Tag) ) ).Picture.LoadFromFile(...);
end;

procedure TForm1.OnCreate(Sender : TObject);

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;

Cordialement.
0
Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
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.
0

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

Posez votre question
lefrancais83 Messages postés 3 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 29 avril 2005
29 avril 2005 à 11:33
c nikel, ca maaaaaaaaaaarche ( a ma sauce ^^)
Merci bcp bcp.

^^;;
0
jvth Messages postés 5 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 11 juillet 2012
9 juil. 2012 à 19:48
jvth
Bonjour a tous

Jai un petit probleme avec Delphi 2010 voici

Programme ecrit avec Delphi 6 ,si j'ouvre le programme avec Delphi 2010 celui ci ne fonctionne plus correctement
/////
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls;

type
TForm1 = class(TForm)
UpDown1: TUpDown;
UpDown2: TUpDown;
Memo1: TMemo;
Label1: TLabel;
procedure UpDown1Click(Sender: TObject; Button: TUDBtnType);
procedure UpDown2Click(Sender: TObject; Button: TUDBtnType);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);


begin
memo1.Text :=FormatDateTime('hh:mm:ss',strtotime(inttostr(updown1.Position)
+':'+ (inttostr(updown2.Position))));
Label1.Caption:=memo1.Text;
end;


procedure TForm1.UpDown2Click(Sender: TObject; Button: TUDBtnType);

begin
memo1.Text :=FormatDateTime('hh:mm:ss',strtotime(inttostr(updown1.Position)
+':'+ (inttostr(updown2.Position))));
Label1.Caption:=memo1.Text;
end;


end.

////

Merci pour votre aide

jvth
0
solilog Messages postés 273 Date d'inscription samedi 13 juin 2009 Statut Membre Dernière intervention 18 avril 2015 10
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.

solilog
0
Rejoignez-nous