Pb de création d'un évènement d'un Tshape créé dynamiquement

Résolu
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 - 9 juin 2013 à 16:38
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 - 9 juin 2013 à 17:04
Bonjour,

Je créé un nombre variable de Tshape dynamiquement :

 ...
 With ListShapes[nC-1] do
 begin
   Parent      := Form1;
   Shape       := stRectangle;
   Brush.Color := Form1.Color;
   pen.Color   := Clblack;
   height      := HC;
   width       := WC;
   Left        := Ox + WC * (j-1) - j;
   Top         := Oy + HC * (i-1) - i;
 //OnMouseDown(@Self,mbLeft,[]{Shift},0,0);
 end;
 ...


J'ai besoin d'identifier un clic de souris sur l'un des Tshape ainsi créé. Mais je n'y arrive pas.

Je sais gérer des évènements Onclick dynamiquement mais TShape ne possède pas cet évènement.
qu'elqu'un a t-il fait?
Je n'arrive même pas à déclarer la propriété:
OnMouseDown := TMouseEvent(@Self,mbLeft,[]{Shift},0,0);

ne fonctionne pas non plus!

J'ai trouvé une solution avec un hook souris pour identifier un clic en coordonnées écran, mais dès que la souris se balade hors de la fenêtre, elle plante tout. Je ne maîtrise pas suffisamment les Hook que je trouve trop lourd pour gérer des clics sur Tshape.

Mais je vois que OnMousedown n'est pas très simple non plus à gérer.

Merci

Jean_Jean

1 réponse

cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
9 juin 2013 à 17:04
Bon ça doit-être la fatigue de la semaine, j'avais pourtant essayé hier!

//dans la zone public
...
procedure ShapeMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
end;

procedure TForm1.ShapeMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  showmessage('clic de '+Tshape(Sender).Name+' en '+inttostr(X)+'-'+inttostr(Y));
end;

Procedure TForm1.CreationZones;
begin
...
 ListShapes[nC-1] := TShape.Create(Form1);
 With ListShapes[nC-1] do
 begin
...
   OnMouseDown := ShapeMouseDown;
 end;
end;


ça marche impec! Merci jean_jean

Jean_Jean
3
Rejoignez-nous