Bonjour,
comment définir une zone réactive (de forme quelconque) dans une image
Merci pour votre aide
Bonjour,
comment définir une zone réactive (de forme quelconque) dans une image
Merci pour votre aide
Il y avait un article à ce sujet dans le Msdn magazine il y a quelques années, par Paul Dilescia. Il y a sans doute d'autres solutions mais celle-ci à l'avantage de la simplicité:
Il te faut un offscreen bitmap qui contient un masque avec une couleur différente pour chaque zone clickable. Le masque a les mêmes dimensions que l'autre bitmap.
Il te suffit sur le click de l'image de regarder à quelle couleur du offscreen bitmap corresponds le click (coordonnées bitmap=coordonnées du click).
Et voilà, comme disent les ricains
A ce titre j'aimerais qu'on m'explique pourquoi dans la VCL le OnClick ne comporte pas les coordonnées de la souris, ce qui dans un cas comme celui-ci serait si pratique.
yarp
www.senosoft.com
Bonjour,
J'aurais 'proposé' de définir la région avec CreateRectRgn(...) (la zone définie peut ainsi être récupérée dans un objet de type RECT) ou une fonction similaire, et de tester avant le Click() - dans l'évènement OnMouseDown() - la position de la souris par rapport au coordonnées de la région.
@ +
Current StatusAux persévérants aucune route n'est interdite.
Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
Faîtes quelque chose de bien avec vos petits sous: Enfants du MekongAvec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
(re)Bonjour,
Un petit test, en espérant que cela corresponde a ce que tu cherchais :
.dans le .h de la TForm :
.dans le .cpp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 private: // Déclarations de l'utilisateur TRect rect;
En espérant t'aider,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 void __fastcall TForm2::FormCreate(TObject *Sender) { TRect imrect = Image1->Canvas->ClipRect; rect.left = imrect.left + 15; rect.top = imrect.top + 15; rect.bottom = imrect.bottom - 15; rect.right = imrect.right - 15; } //puis void __fastcall TForm2::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { TPoint ppoint; ppoint.x = X; ppoint.y = Y; if ( PtInRect(&rect, ppoint)!= 0 ) { ShowMessage("Arrêtes, tu me chatouille !"); } }
@ +
Current StatusAux persévérants aucune route n'est interdite.
Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
Faîtes quelque chose de bien avec vos petits sous: Enfants du MekongAvec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager