Tracer des polygones remplis de différentes couleurs.

Résolu
cs_youyou40 Messages postés 65 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 28 avril 2022 - 2 janv. 2017 à 20:33
cs_youyou40 Messages postés 65 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 28 avril 2022 - 3 janv. 2017 à 12:56
Bonjour,
Je voudrais tracer des polygones dans une form ou un PictureBox (à partir par exemple d'un tableau de points pour chaque polygone).
Je parviens facilement à le faire avec l'API Polygon de GDI mais je ne parviens pas à les remplir de couleurs différentes...
Comment faire? Faut-il aller chercher GDI+ ?

Merci d'avance pour toute info.


--

4 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 2/01/2017 à 22:35
Bonjour,
Regarde ce que ferait ceci :
Private Const ALTERNATE = 1
Private Const WINDING = 2
Private Type POINTAPI
x As Long
y As Long
End Type
Private Declare Function SetPolyFillMode Lib "gdi32" (ByVal hdc As Long, ByVal nPolyFillMode As Long) As Long
Private Declare Function GetPolyFillMode Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function Polygon Lib "gdi32" (ByVal hdc As Long, lpPoint As POINTAPI, ByVal nCount As Long) As Long

Private Sub Form_Activate()
Me.AutoRedraw = True
Me.ScaleMode = vbPixels
Dim MP(1 To 3) As POINTAPI, Cnt As Long
MP(1).x = 3
MP(1).y = 10
MP(2).x = 200
MP(2).y = 50
MP(3).x = 10
MP(3).y = 60
Me.FillStyle = vbSolid
Me.FillColor = RGB(255, 0, 0)
If GetPolyFillMode(Me.hdc) <> WINDING Then SetPolyFillMode Me.hdc, WINDING
Polygon Me.hdc, MP(1), 3

End Sub


(j'espère que tu aimes le rouge, sinon joue sur les composantes de RGB).

Et tu devrais dans la foulée t'intéresser aux autres propriétés du conteneur sur lequel tu dessines (Form ou PictureBox). fait varier, par exemple, les valeurs de la propriétés DrawMode...
Vu ?
Intéresse-toi maintenant à d'autres propriétés de ce conteneur. C'est ainsi, que tu apprendras.
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
cs_youyou40 Messages postés 65 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 28 avril 2022
3 janv. 2017 à 12:05
Merci beaucoup ucfoutu pour ta réponse .

Je suis vraiment idiot: en fait je faisais à peu près la même chose (si ce n'est qu'au lieu d'utiliser les propriétés FillStyle et FillColor du conteneur, j'utilisais les API CreateSolidBrush et SelectObject) mais l'erreur était ailleurs: mon programme affiche une multitude de polygones et je ne m'étais pas aperçu que dans mes essais , les derniers polygones (de la même couleur donc) étaient les plus grands et recouvraient les autres donc j'avais l'impression que tous les polygones avaient pris la dernière couleur et que mon code ne marchait pas...
Ta réponse m'a permis de comprendre que l'erreur était ailleurs....

Merci encore.

Et donc, que vaut-il mieux faire: utiliser FillColor et FillStyle ou les API CreateSolidBrush et selectObject? L'un est-il plus rapide que l'autre pour afficher un grand nombre de polygones?
--
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
3 janv. 2017 à 12:55
Et donc, que vaut-il mieux faire: utiliser FillColor et FillStyle ou les API CreateSolidBrush et selectObject? L'un est-il plus rapide que l'autre pour afficher un grand nombre de polygones? 

Ce que tu veux, car cela ne change pas vraiment grand-chose à ce niveau-là.
Te reste à libérer cette discussion si problème résolu (un clic sur le tag résolu au niveau de ton tout premier message). Merci d'y penser.
0
cs_youyou40 Messages postés 65 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 28 avril 2022
3 janv. 2017 à 12:56
Merci encore ucfoutu

--
0
Rejoignez-nous