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.
@ +![]()
(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 !"); } }
@ +![]()
Partager