Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2221 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Image et "hyperlien" (?)

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Image et "hyperlien" (?)

n°369814
haazheel
Posté le 23-04-2003 à 19:28:58  profilanswer
 

Salut,
 
alors voilà mon problème:
 
je programme avec Borland C++ Builder 6.0 et dans une fenêtre j'affiche une image grâce au composant TImage, sur laquelle j'ajoute des petits cercles dont les coordonnées me sont données par un fichier, grâce à la commande
 

Code :
  1. Image1->Canvas->Ellipse(X-4,Y+4,X+4,Y-4);


 
Et là tout se passe bien... Mais je voudrais maintenant permettre à l'utilisateur de cliquer sur ces cercles pour enchainer une autre action.
 
La seule méthode à laquelle j'ai pensé serait, dans l'évenement MouseMove, de localiser les coordonnées de la souris sur l'image, et de lancer une boucle for() pour vérifier si les coordonnées du point survolé actuellement font référence aux coordonnées d'un point contenu dans un vecteur, rempli au fur et à mesure de l'affichage de ces cercles...
 
Mais comme mon fichier pourra contenir à peu près une centaine de ces points, j'ai peur que ça soit trop long à vérifier...
 
Je vous demande donc si vous connaissez une autre méthode pour arriver au même résultat...
 
Merci d'avance!!

mood
Publicité
Posté le 23-04-2003 à 19:28:58  profilanswer
 

n°369816
mrbebert
Posté le 23-04-2003 à 19:35:58  profilanswer
 

C'est inutile de le faire chaque fois que la souris se déplace (MouseMove), mais seulement lorsqu'il y a un click :)  
 
Sinon, oui, je vois pas d'autre moyen. Il faut faire en sorte de calculer facilement le cercle correspondant au click [:proy]

n°369855
haazheel
Posté le 23-04-2003 à 20:30:44  profilanswer
 

mrBebert a écrit :

C'est inutile de le faire chaque fois que la souris se déplace (MouseMove), mais seulement lorsqu'il y a un click :)


 
Je pense quand même garder l'évenement MouseMove si je veux changer la forme du curseur au moment où il passe sur l'un des points...

n°370019
haazheel
Posté le 23-04-2003 à 23:37:19  profilanswer
 

Bon alors le code suivant me fait un truc bizarre:
 

Code :
  1. void __fastcall TAnalyseShootsForm::Image1MouseMove(TObject *Sender,
  2.       TShiftState Shift, int X, int Y)
  3. {
  4. //A chaque déplacement de la souris, on vérifie si les coordonnées
  5. //se trouvent au dessus d'un point du vecteur TableauShoots
  6. for (int i=0; i < TableauShoots.size(); i++)
  7. {
  8.         int TirX = TableauShoots.operator [](i).CoordX;
  9.         int TirY = TableauShoots.operator [](i).CoordY;
  10.         if (X < (TirX+4) && X > (TirX-4) && Y < (TirY+4) && Y > (TirY-4))
  11.                 Image1->Cursor = crHandPoint;
  12.         else
  13.                 Image1->Cursor = crDefault;
  14. }
  15. }


 
Ca marche, la souris change bien de forme, mais uniquement pour le dernier point du vecteur...
 
Quelqu'un peut m'expliquer ça?

n°370047
haazheel
Posté le 24-04-2003 à 00:10:33  profilanswer
 

J'ai trouvé...
 
le problème est qu'à chaque mouvement de la souris la boucle est recalculée, et s'arrête sur le dernier élément de la boucle...
 
Le code correct est donc:
 

Code :
  1. void __fastcall TAnalyseShootsForm::Image1MouseMove(TObject *Sender,
  2.       TShiftState Shift, int X, int Y)
  3. {
  4. int ConfirmOK = 0;
  5. //A chaque déplacement de la souris, on vérifie si les coordonnées
  6. //se trouvent au dessus d'un point du vecteur TableauShoots
  7. for (int i=0; i < TableauShoots.size(); i++)
  8. {
  9.         int TirX = TableauShoots.operator [](i).CoordX;
  10.         int TirY = TableauShoots.operator [](i).CoordY;
  11.         if (X < (TirX+4) && X > (TirX-4) && Y < (TirY+4) && Y > (TirY-4))
  12.                 ConfirmOK = 1;
  13. }
  14. if (ConfirmOK == 1)
  15.         Image1->Cursor = crHandPoint;
  16. else
  17.         Image1->Cursor = crDefault;       
  18. }


 
Et là ça marche...

n°370119
antp
Super Administrateur
Champion des excuses bidons
Posté le 24-04-2003 à 09:22:14  profilanswer
 

haazheel a écrit :


 
Ca marche, la souris change bien de forme, mais uniquement pour le dernier point du vecteur...
 
Quelqu'un peut m'expliquer ça?


 
bhen si tu mets pas de break même après avoir trouvé une zone qui fera changer le curseur il parcourera les autres et remettra le curseur d'origine
Dans ta 2e solution un break permettrait d'arrêter la boucle quand on a trouvé, c'est tj ça de gagné


Message édité par antp le 24-04-2003 à 09:22:47

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Image et "hyperlien" (?)

 

Sujets relatifs
[Algo] Détecter l'orientation d'une image (et étapes intermédiaires)[js ? vbs?] récupérer l'image associée d'un programme (icone) ?
[html]Mettre une image pour un bouton de formulaire ?[PHP] Intercépter un chemain pour l'utiliser comme source d'une image?
Probleme avec JPGraph et generation d'image[Vb.net] Intégration d'image au projet....
barre d'outil image sous IE...[HTML/CSS] comment positionner verticalement une image ?
[Résolu] Espace non désiré sous une image dans un tableauMettre une image dans un blob (MySQL) pour ensuite l'afficher ??
Plus de sujets relatifs à : Image et "hyperlien" (?)


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR