Appel d'une procédure

[Résolu]
Signaler
Messages postés
197
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
17 décembre 2014
-
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
-
Bonjour,

J'ai créé une procédure avec à l'interieur un code qui fonctionne bien, le probleme c'est que je n'arrive appeller cette procédure

Voici sa déclaration :    
Type
procedure BoussoleHoraire(Sender: TObject; Shift: TShiftState; X, Y: Integer);

J'ai essaye quelque chose du genre :

procedure TForm1.Button3Click(Sender: TObject);
   Begin
   BoussoleHoraire(sender,shift, x, y);
   end;

 Mais ça marche pas !

Pour info, l'objectif de cette procédure était d'avoir les caracteristiques que l'on trouve dans un evenement MouseMove afin de recuperer la position precise de la souris sur un composant.

Merci dans tous les cas pour votre aide.

10 réponses


Salut,

Ca ne fonctionnera pas :

procedure TForm1.Button3Click(Sender: TObject);
Begin
BoussoleHoraire(sender,shift, x, y);
end;

Shift,X et Y ne sont pas définis dans ta procédure ButtonClick. Ainsi le compilo refuse de faire son job : Shift, X et Y ne sont pas définit.

Pour info, l'objectif de cette procédure était d'avoir les caracteristiques que l'on trouve dans un evenement MouseMove afin de recuperer la position precise de la souris sur un composant.


je comprend pas bien ce que tu cherches à faire : Explique précisément ton objectif dans sa globalité car la j'ai le sentiment que tu es entrain de t'égarer :


Sinon f0xi t'a passé ce bout de code



procedure TFormX.Image1Click(Sender: TObject);
var MP : TPoint;
begin
  GetCursorPos(MP);
  MP := (sender as TImage).ScreenToClient(MP);
end;





Il suffit de le transformer en fonction

Function Get_X_MousePosition(AImage:TImage):TPoint;
Var
  MP:TPoint;
Begin
  GetCursorPos(MP);
  MP:=AImage.ScreenToClient(MP);
  Result:=MP;
End;

procedure TForm1.Button3Click(Sender: TObject);
Var
  MP:TPoint;
   Begin
     MP:=Get_X_MousePosition(Image2):
   end;
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
18
Salut,




procedure TForm1.BoussoleHoraire(Sender: TObject; Shift: TShiftState; X, Y: Integer);


begin


... Ton code ...

end;




Puis, tu sélectionnes le composant concerné, et dans l'onglet Evénements de l'inspecteur d'objets, tu mets BoussoleHoraire dans l'événement OnMouseMove.
Messages postés
197
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
17 décembre 2014

Bonjour et merci de cette reponse, mais ma question n'est pas sur le fait de savoir où placer mon appel de procédure mais sur le fait de savoir comment synthaxiquement appeller ma procédure.

procedure TForm1.Button3Click(Sender: TObject);
   Begin
   BoussoleHoraire(sender,shift, x, y);  <<<-- En gros je ne sais pas quoi mettre entre les parentheses (Delphi attend des parametres ( (Sender: TObject; Shift: TShiftState; X, Y: Integer);  )mais je ne sais pas quoi  lui mettre)

Merci par avance,
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
salut,

si tu fais comme Caribensila t'as expliqué, tu verra que cela fonctionne tout seul (cad, que l'appel se ferra tout seul lorsque tu bougera la souris sur le composant).

si ce n'as pas ce que tu veux essai avec GetCursorPos(P) ou reformule ta question.

bon code,

Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
Messages postés
197
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
17 décembre 2014

Bonjour,

Je voudrais simplement savoir les parametres probables qu'il faut mettre en parenthéses (voir réponse plus haut), car je souhaite executer la procédure dans un bouton et non dans un evenerment MouseMove.

Merci pour vos réponses.

Cordialement,
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
18
Je ne vois pas bien où tu veux arriver... Mais tu peux aussi faire ceci :

procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  BoussoleHoraire(sender,Shift, X, Y);
end;

OU encore

procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  BoussoleHoraire(sender,[ssLeft], X, Y);
end;

On s'est croisé dans nos réponses : désolé Cari
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
18
Y'a pas de mal Francky.
J'ai même rien senti. 
Messages postés
197
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
17 décembre 2014

Merci pour ces réponses, mais je comile pas "Get_x_MousePosition identifcateur non déclaré" savez vous qu'est-ce qu'il faut que je mette ?

Pour rappel l'objectif est de parvenir d'avoir ma position de la souris sur mon image est d'avoir la bonne information de positionnement comme le ferais un MouseDown par exemple.
En substance, j'ai synthétisé vos observations comme ci-dessous est-ce que ça vous parez cohérent ?

Merci par avance,

var NewItem: TMenuItem;
var NomTypeActivite : string;


var x, y : integer;
var MP : TPoint;
var AImage:TImage;


Begin


 GetCursorPos(MP);
  MP := (sender as TImage).ScreenToClient(MP);
  GetCursorPos(MP);
  MP:=AImage.ScreenToClient(MP);
  MP:=Get_X_MousePosition(Image2):


// Appel la procédure permettant de savoir l'horaire sur lequel se trouve le pointeur de la souris
 BoussoleHoraire(sender,[ssLeft], X, Y);
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
18
« je souhaite executer la procédure dans un bouton et non dans un evenerment MouseMove »
+
« l'objectif est de parvenir d'avoir ma position de la souris sur mon image »
________________________________________________________

=  C'est clair comme du jus de chique, ton truc.  J'entrave queud.