Tracer des polygones remplis de différentes couleurs. [Résolu]

cs_youyou40 58 Messages postés lundi 20 décembre 2004Date d'inscription 3 janvier 2017 Dernière intervention - 2 janv. 2017 à 20:33 - Dernière réponse : cs_youyou40 58 Messages postés lundi 20 décembre 2004Date d'inscription 3 janvier 2017 Dernière intervention
- 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.


--
Afficher la suite 

4 réponses

Répondre au sujet
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 2/01/2017 à 22:35
0
Utile
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.
Commenter la réponse de ucfoutu
cs_youyou40 58 Messages postés lundi 20 décembre 2004Date d'inscription 3 janvier 2017 Dernière intervention - 3 janv. 2017 à 12:05
0
Utile
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?
--
Commenter la réponse de cs_youyou40
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 3 janv. 2017 à 12:55
0
Utile
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.
Commenter la réponse de ucfoutu
cs_youyou40 58 Messages postés lundi 20 décembre 2004Date d'inscription 3 janvier 2017 Dernière intervention - 3 janv. 2017 à 12:56
0
Utile
Merci encore ucfoutu

--
Commenter la réponse de cs_youyou40

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.