Pb de création d'un évènement d'un Tshape créé dynamiquement [Résolu]

Signaler
Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
-
Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
-
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

Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
3
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