Création dynamique [Résolu]

Signaler
Messages postés
379
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
8 octobre 2008
-
Messages postés
379
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
8 octobre 2008
-
bonjour, 
   je fais une création dynamique d'image comme un album en quelque sorte et, jusque là tout marche nickel, dont voici le script :

var
  Form1: TForm1;
  nbImage : Integer;
  TBitmap : Array of TImage;
  TabSheet : Array of TTabSheet;
  NbOnglet : integer;
  T, L : Integer;
Const
  Lim : Integer = 16;

procedure TForm1.FormCreate(Sender: TObject);
begin
  T : = -140;
  L := -100;
  SetLength(TBitmap, 500);
  SetLength(TabSheet, 30);
  NbOnglet := -1;
end ;

procedure TForm1.Button1Click(Sender: TObject);
begin
ifnot OpenPictureDialog1.Execute then Exit;
if NbOnglet < ((nbImage) div Lim)+1 then
  begin
  NbOnglet : = ((nbImage) div Lim)+1;
  TabSheet[NbOnglet] := TTabSheet.Create(Self);
  TabSheet[NbOnglet].PageControl := PageControl1;
  TabSheet[NbOnglet].PageIndex := NbOnglet-1;
  TabSheet[NbOnglet].ImageIndex := NbOnglet-1;
  TabSheet[NbOnglet].Caption := 'Page' + IntToStr(NbOnglet);
  PageControl1.ActivePage := TabSheet[NbOnglet];;
  PageControl1.TabIndex := PageControl1.TabIndex +1;
  Caption := (inttostr(nbImage+1)+'  '+inttostr(NbOnglet));
  end
else
  begin
  PageControl1.TabIndex := NbOnglet;
  end ;



TBitmap[nbImage] : = TImage.Create(TabSheet[NbOnglet]);
TBitmap[nbImage].Parent := TabSheet[NbOnglet];
TBitmap[nbImage].Picture.LoadFromFile(OpenPictureDialog1.FileName);




if (nbImage mod Lim = 0) then
  begin
  T := 10;
  L := -150;
  end ;
if (nbImage mod 4 = 0) then
  begin
  L := L + 150;
  T := 20;
  end
else
  T : = T + 100;



TBitmap[nbImage].Top := T;
TBitmap[nbImage].Left := L;
TBitmap[nbImage].Proportional := True;




Inc (nbImage);
end;



Ce que j'aimerais faire et qui me pose problème est de créer un évènement onClick sur toutes les images crées auquel sa me retourne le numéro de l'image 
   ex : j'ai mis en page 25 images et je clique sur la 8ème, que j'ai mise, et une variable s'affecte à 8 pour pouvoir faire des traitements sur celle là, puis je clcique sur la 22ème image et idem la même variable s'affecte a 22 ...

Alors je sais que l'on peut faire un TBitmap[nbimage].onclick : = BmpClick et créer la procédure BmpClick(Sender : TObject)
 mais je ne vois pas comment affecter une valeur qui identifie l'image

merci pour toute aide !!!

4 réponses

Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
Bonjour,

En utilisant la propriété Tag du TBitmap, à laquelle tu peux affecter le numéro. Ensuite tu utilises TBitmap(Sender).tag dans ta procédure BmpClick pour récupérer ce numéro.

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
Messages postés
637
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
9 janvier 2017

Bonjour,


 


TImage a la l'événement " onClick "
Aussi il suffit lors de la création de  IMAGE  de définir TBitmap[nbImage].OnClick  := programme.

yvessimon
Messages postés
379
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
8 octobre 2008

Merci à WhiteIppo et à yvessimon

Les 2 propositions sont interressantes !!

J'opterai particulièrement pour la proposition de WhitteIppo car mon programme est déjà très avancé et j'ai pas trop envie de tout réécrire concernant cela !!

WhitteIppo :

voilà ce j'ai fait mais ça ne marche pas, je t'indique l'erruer à la ligne correspondante : 
procedure TForm1.BmpClick(Sender: TObject);
var
   NumClick : integer;
begin
   NumClick := TBitmap(Sender).tag; //[Erreur] Unit1.pas(67): Opérateur ou point-virgule manquant
   ShowMessage(IntToStr(NumClick));
end;
Messages postés
379
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
8 octobre 2008

WhitteIppo :
   sa y est j'ai trouvé pourquoi en fait j'utilise un tableau de TImages que j'ai nommé TBitmap ce que l'on a certainement confondus avec la classe TBitmap

donc voicio la correction :

procedure TForm1.BmpClick(Sender: TObject);
var
   NumClick : integer;
begin
   NumClick := TImage(Sender).tag; 
   ShowMessage(IntToStr(NumClick));
end;

encore merci !!