Déplacement souris + image [Résolu]

cs_katharos
Messages postés
10
Date d'inscription
mardi 27 février 2007
Dernière intervention
14 mars 2007
- 6 mars 2007 à 11:20 - Dernière réponse : japee
Messages postés
1799
Date d'inscription
vendredi 27 décembre 2002
Dernière intervention
19 juillet 2018
- 6 mars 2007 à 16:06
J'aimerais pouvoir animer une image en l'agrandissant et en la mettant au premier plan juste quand la souris passe dessus cette image, quand la souris n'est plus dessus j'aimerais que l'image redeviennent comme avant. Merdi d'avance je ne trouve que des codes avec des clic
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
sylvunix
Messages postés
103
Date d'inscription
mardi 11 avril 2006
Dernière intervention
4 mars 2009
- 6 mars 2007 à 12:39
3
Merci
Si l'image ne s'agrandit pas, il manque certainement la propriété Strech à True pour Image1.

En tenant compte de la remarque de Loda que je salue au passage, le code devient :

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  // Agrandissement de l'image
  Image1.Height := 482;
  Image1.Width := 706;

  // Armer le timer
  Timer1.Enabled := True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  // Regarder si la souris est en dehors de l'image
  if not PtInRect(Image1.BoundsRect, Mouse.CursorPos) then
  begin
    // Réduction de l'image (remettre la taille initiale)
    Image1.Height := 48;

    Image1.Width := 70;

    // Désarmer le timer
    Timer1.Enabled := False;
  end;
end;

Merci sylvunix 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de sylvunix
Meilleure réponse
cs_rt15
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Dernière intervention
7 novembre 2014
- 6 mars 2007 à 12:39
3
Merci
Le code de Loda permet de savoir si la souris est au dessus de l'image ou pas.


AU moins une faute de frappe d'ailleurs, c'est : if not PtInRect(image1.boundsrect, Mouse.cursorpos) then

Ca remplace :

  if (Mouse.CursorPos.X-Form1.Left < Image1.Left) or
     (Mouse.CursorPos.X-Form1.Left > Image1.Left+Image1.Width) or
     (Mouse.CursorPos.Y-Form1.Top < Image1.Top) or
     (Mouse.CursorPos.Y-Form1.Top > Image1.Top+Image1.Height) then


Pour ton image qui change pas de dimensions... C'est peut être une
propriété de ton composant qui force la taille de celui-ci à la taille
de l'image.

Merci cs_rt15 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de cs_rt15
sylvunix
Messages postés
103
Date d'inscription
mardi 11 avril 2006
Dernière intervention
4 mars 2009
- 6 mars 2007 à 11:49
0
Merci
Bonjour katharos,

Je pense que tu as trouvé facilement l'évènement OnMouseMove de ton TImage qui est appelé lorsque la souris passe au dessus de l'image.

Le problème est que tu n'auras pas d'évènement pour te signaler que la souris n'est plus sur l'image.

Tu peux créer un timer qui après un certain temps (1000 ms par exemple) effectuera ce contrôle. Voici un exemple de code :

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  // Ici ton code pour agrandir l'image ...

  // Armer le timer
  Timer1.Enabled := True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  // Regarder si la souris est en dehors de l'image
  if (Mouse.CursorPos.X-Form1.Left < Image1.Left) or
     (Mouse.CursorPos.X-Form1.Left > Image1.Left+Image1.Width) or
     (Mouse.CursorPos.Y-Form1.Top < Image1.Top) or
     (Mouse.CursorPos.Y-Form1.Top > Image1.Top+Image1.Height) then
  begin
    // Ici ton code pour réduire l'image ...

    // Désarmer le timer
    Timer1.Enabled := False;
  end;
end;

Il y a peut-être mieux mais en tout cas cette solution fonctionne ...
Commenter la réponse de sylvunix
cs_Loda
Messages postés
900
Date d'inscription
vendredi 3 novembre 2000
Dernière intervention
30 juillet 2009
- 6 mars 2007 à 11:58
0
Merci
salut,

juste un "trucs" pour simplifier:

PtInRect

if not PtInRect(image1.boudsrect, Mouse.cursorpos) then
// (de mémoire)

A+

Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
Commenter la réponse de cs_Loda
cs_katharos
Messages postés
10
Date d'inscription
mardi 27 février 2007
Dernière intervention
14 mars 2007
- 6 mars 2007 à 12:10
0
Merci
Oui merci j'avais trouvée OnMouseMove (bonne idée le timer) mais j'ai encore un probleme dans ton code tu as mis //Ici ton code pour agrandir l'image ... mais cette image ne s'agrandie pas. Aurai je oublié quelque chose j'ai juste fait :

   Image1.Height := 482;
   Image1.Width := 706;

à la place de Ici ton code pour agrandir l'image dans le OnMouseMove. Merci
Commenter la réponse de cs_katharos
cs_katharos
Messages postés
10
Date d'inscription
mardi 27 février 2007
Dernière intervention
14 mars 2007
- 6 mars 2007 à 12:17
0
Merci
Merci Loda mais je suis débutante, ou doi je placé ce test. Je suis alé voir l'aide de delphi la dessus mais je ne vois pas vrément son utilité
Commenter la réponse de cs_katharos
Cirec
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
- 6 mars 2007 à 12:38
0
Merci
Salut,

personnellement j'utiliserais OnMouseEnter et OnMouseLeave qui, me semble, sont bien plus appropriés et du coup plus besoin de Timer ni de PtInRect

Et pour ton problème de taille il faut aussi penser à mettre la propriété Stretch du TImage à True pour voir les changements de taille

 
@+
Cirec

<hr size="2" />
Commenter la réponse de Cirec
sylvunix
Messages postés
103
Date d'inscription
mardi 11 avril 2006
Dernière intervention
4 mars 2009
- 6 mars 2007 à 12:44
0
Merci
Bonjour Cirec,

En ce qui concerne la propriété Stretch, nos messages se sont croisés !

Par contre les évènements OnMouseEnter et OnMouseLeave ne sont pas codés dans TImage (sauf erreur de ma part) et je ne vois pas sur quels composants tu peux les accrocher.
Commenter la réponse de sylvunix
Cirec
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
- 6 mars 2007 à 13:01
0
Merci
Tout dépend de la version de Delphi

je viens de le faire sous Turbo Delphi:

//Propriétés à changer
//Image1.AutoSize:= False;

//Image1.Stretch := True;

procedure TForm1.Image1MouseEnter(Sender: TObject);
Var aRect : TRect;
begin
  aRect : = Image1.BoundsRect;
  InflateRect(aRect , 3, 3);
  Image1.BoundsRect := aRect;
end ;

procedure TForm1.Image1MouseLeave(Sender: TObject);
Var aRect : TRect;
begin
  aRect : = Image1.BoundsRect;
  InflateRect(aRect , -3, -3);
  Image1.BoundsRect := aRect;
end ;

sinon elle s'ajoutent très facilement

 
@+
Cirec

<hr size ="2" />
Commenter la réponse de Cirec
Utilisateur anonyme - 6 mars 2007 à 15:38
0
Merci
Salut,

Je me mèle à vous si ca vous gène pas . Juste une remarque sur ce petit bout de code 

// Réduction de l'image
  Image1.Height := 482;
  Image1.Width := 706;

Dans le cadre d'un agrandissement/réduction il serait mieux de ne pas utiliser de valeurs numériques sans signification.

Il serait plus correct d'écrire par exemple sur le concept d'écrire

 // Réduction de l'image  de 10%.
  Image1.Height := Image1.Height  DIV 10;
  Image1.Width := Image1.Width   DIV 10;

@+
Commenter la réponse de Utilisateur anonyme
Utilisateur anonyme - 6 mars 2007 à 15:39
0
Merci
Oh là la boulette (C'est la journée lol)

 // Réduction de l'image  à 10%.
  Image1.Height := Image1.Height  DIV 10;
  Image1.Width := Image1.Width   DIV 10;
Commenter la réponse de Utilisateur anonyme
japee
Messages postés
1799
Date d'inscription
vendredi 27 décembre 2002
Dernière intervention
19 juillet 2018
- 6 mars 2007 à 16:06
0
Merci
Attention !

if not PtInRect(Image1.BoundsRect, Mouse.CursorPos) then

ne va fonctionner que si le form est en position (0,0), puisque cursorPos est la position par rapport à Screen.

il vaut mieux faire :

if not PtInRect(Image1.BoundsRect, ScreenToClient(Mouse.CursorPos)) then

Bonne prog'
Commenter la réponse de japee

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.