Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Coloriage de triangle

9 réponses
Avatar
Arnaud
Salut à tous

Je voudrais " colorier " une forme graphique réalisée par des Lines : un
triangle par exemple en couleur 6

Form1.Picture1.Line (X, Y)-Step(0, 200), QBColor(6)
Form1.Picture1.Line (X, Y + 200)-Step(130, -100), QBColor(6)
Form1.Picture1.Line (X + 130, Y + 100)-Step(-130, -100), QBColor(6)

Existe t'il une solution / instruction simple pour ça en VB6 ?

Merci d'avnce

Arnaud

9 réponses

Avatar
Jean-marc
Arnaud wrote:
Salut à tous

Je voudrais " colorier " une forme graphique réalisée par des Lines :
un triangle par exemple en couleur 6

Form1.Picture1.Line (X, Y)-Step(0, 200), QBColor(6)
Form1.Picture1.Line (X, Y + 200)-Step(130, -100), QBColor(6)
Form1.Picture1.Line (X + 130, Y + 100)-Step(-130, -100), QBColor(6)

Existe t'il une solution / instruction simple pour ça en VB6 ?

Merci d'avnce

Arnaud



Hello,

oui il suffot d'utiliser l'API "F l o o d f i l l" .
Voir MSDN:
http://msdn.microsoft.com/en-us/library/ms532286(VS.85).aspx

Et un exemple:
http://forums.msdn.microsoft.com/en-US/vbgeneral/thread/db945af8-efc1-47e4-8483-3e1e859bb492/
et un autre:
http://www.vb-helper.com/howto_flood_fill.html

Voir aussi un sujet d'hier avec la réponse de Jacques.

Cordialement;


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
LE TROLL
Bonjour, vois ma question, tu as tout, Le Troll 12/08/08 11h03 :o)

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Arnaud" <clerget_aclub-internet.fr> a écrit dans le message de news:
48a33501$0$292$
| Salut à tous
|
| Je voudrais " colorier " une forme graphique réalisée par des Lines : un
| triangle par exemple en couleur 6
|
| Form1.Picture1.Line (X, Y)-Step(0, 200), QBColor(6)
| Form1.Picture1.Line (X, Y + 200)-Step(130, -100), QBColor(6)
| Form1.Picture1.Line (X + 130, Y + 100)-Step(-130, -100), QBColor(6)
|
| Existe t'il une solution / instruction simple pour ça en VB6 ?
|
| Merci d'avnce
|
| Arnaud
|
|
Avatar
Arnaud
Merci de vos reponses :o)

Ca ne fontionne que si je pointe hors du triangle. Tout ce rempli sauf
l'interieur du triangle Ca ne fontionne pas si je pointe dans la triangle
...

Form1.Picture1.FillStyle = 0
Form1.Picture1.ForeColor = 0 ' Triangle couleur noir
Form1.Picture1.FillColor = 0
Form1.Picture1.Line (X , Y)-Step(0, 200), 0
Form1.Picture1.Line -Step(150, -100), 0
Form1.Picture1.Line -Step(-150, -100), 0
F l o o d F i l l Form1.Picture1.hDC, X + 100, Y + 100, 0
Avatar
LE TROLL
Bonjour,

Oui... moi non plus je n'ai pas réussi, j'ai fini par remplir mon cercle de
rayons d'une autre couleur, tente de faire pareil pour le triangle, remplis
le avec des "line"...

Par contre, pour le cercle ça marche, tu peux aussi faire un cercle coloré
dans la couleur voulue, et enlever ce qui dépasse dans la couleur de fond...

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Arnaud" <clerget_aclub-internet.fr> a écrit dans le message de news:
48a535c7$0$289$
| Merci de vos reponses :o)
|
| Ca ne fontionne que si je pointe hors du triangle. Tout ce rempli sauf
| l'interieur du triangle Ca ne fontionne pas si je pointe dans la triangle
| ...
|
| Form1.Picture1.FillStyle = 0
| Form1.Picture1.ForeColor = 0 ' Triangle couleur noir
| Form1.Picture1.FillColor = 0
| Form1.Picture1.Line (X , Y)-Step(0, 200), 0
| Form1.Picture1.Line -Step(150, -100), 0
| Form1.Picture1.Line -Step(-150, -100), 0
| F l o o d F i l l Form1.Picture1.hDC, X + 100, Y + 100, 0
|
|
Avatar
Jacques93
Bonjour Arnaud,
Arnaud a écrit :
Merci de vos reponses :o)

Ca ne fontionne que si je pointe hors du triangle. Tout ce rempli sauf
l'interieur du triangle Ca ne fontionne pas si je pointe dans la triangle
...

Form1.Picture1.FillStyle = 0
Form1.Picture1.ForeColor = 0 ' Triangle couleur noir
Form1.Picture1.FillColor = 0
Form1.Picture1.Line (X , Y)-Step(0, 200), 0
Form1.Picture1.Line -Step(150, -100), 0
Form1.Picture1.Line -Step(-150, -100), 0
F l o o d F i l l Form1.Picture1.hDC, X + 100, Y + 100, 0





Ton code ne peux pas fonctionner, s'il est complet. Comme tu n'indique s
pas :

Form1.Picture1.Scalemode = vbPixels

tu travailles avec l'unité de mesure par défaut, c'est à dire le Twips.
L'api fonctionne uniquement en pixels, il faut donc soit tout faire en
pixels, soit convertir les coordonnées avant de les passer à l'api.

Essaie ce code :

Dim x As Single, y As Single

' Arbitraire
x = 360: y = 360
Form1.Picture1.FillStyle = 0
Form1.Picture1.ForeColor = 0 ' Triangle couleur noir
Form1.Picture1.FillColor = 0
Form1.Picture1.Line (x, y)-Step(0, 200), 0
Form1.Picture1.Line -Step(150, -100), 0
Form1.Picture1.Line -Step(-150, -100), 0

' permet de vérifier que le point est à l'intérieur
' de la zone à remplir, à mettre en remarque une fois le
' point positionné
Form1.Picture1.DrawWidth = 2
Form1.Picture1.PSet (x + 60, y + 90), QBColor(9)

' L'api fonctionne en pixels, pas en twips, il faut
' convertir les coorfonnées ( 1 pixel = 15 twips)
F l o o d F i l l Form1.Picture1.hDC, _
(x / Screen.TwipsPerPixelX) + 2, _
(y / Screen.TwipsPerPixelY) + 3, _
0

' comme tu n'a pas crée de pinceau avec CreateSolidBrush, le triangle
sera rempli par la couleur par défaut : noir


--

Cordialement,

Jacques.
Avatar
Jacques93
Bonjour LE TROLL,
LE TROLL a écrit :
Bonjour,

Oui... moi non plus je n'ai pas réussi, j'ai fini par remplir mon cercle de
rayons d'une autre couleur, tente de faire pareil pour le triangle, remplis
le avec des "line"...



Tout en finesse ...
Le point que tu passes à l'api est probablement mal positionné. Tu peux
vérifier avec un PSet ou il se trouve (il vaut mieux mettre l'appel à
l'api en remarque pendant cette phase de mise au point)

Je te rappelle aussi que vbPixel = 0, car cette constante n'existe pas.
Si tu n'as pas rectifié, tu travaille en Twips. L'Api fonctionne
uniquement avec des pixels.

Regardes la réponse que j'ai fait à Arnaud. Le code marche, ainsi que
celui que je t'ai donné. La différence est que pour un triangle, on peut
prendre n'importe quel point(comme on a un triangle équilatéral, son
centre par exemple), alors que pour une partie de cercle, il faut
calculer sa position en fonction des deux rayons, et du diamètre du cercle.

--

Cordialement,

Jacques.
Avatar
Jacques93
Jacques93 a écrit :
Bonjour Arnaud,



[...]


' permet de vérifier que le point est à l'intérieur
' de la zone à remplir, à mettre en remarque une fois le
' point positionné
Form1.Picture1.DrawWidth = 2
Form1.Picture1.PSet (x + 60, y + 90), QBColor(9)

' L'api fonctionne en pixels, pas en twips, il faut
' convertir les coorfonnées ( 1 pixel = 15 twips)
F l o o d F i l l Form1.Picture1.hDC, _
(x / Screen.TwipsPerPixelX) + 2, _
(y / Screen.TwipsPerPixelY) + 3, _
0




Pour éviter de faire l'erreur que j'ai commise :

60 twips => 2 pixels au lieu de 4
90 twips => 3 pixels au lieu de 6

il aurait été plus prudent et plus propre d'écrire :

F l o o d F i l l Form1.Picture1.hDC, _
(x + 60) / Screen.TwipsPerPixelX, _
(y + 90) / Screen.TwipsPerPixelY, _
0

--

Cordialement,

Jacques.
Avatar
Arnaud
Magnifique Jaques93 , ca fontionne :o)

Mille merci


"Jacques93" a écrit dans le message de news:
e7SCIFu$
Jacques93 a écrit :
Bonjour Arnaud,



[...]


' permet de vérifier que le point est à l'intérieur
' de la zone à remplir, à mettre en remarque une fois le
' point positionné
Form1.Picture1.DrawWidth = 2
Form1.Picture1.PSet (x + 60, y + 90), QBColor(9)

' L'api fonctionne en pixels, pas en twips, il faut
' convertir les coorfonnées ( 1 pixel = 15 twips)
F l o o d F i l l Form1.Picture1.hDC, _
(x / Screen.TwipsPerPixelX) + 2, _
(y / Screen.TwipsPerPixelY) + 3, _
0




Pour éviter de faire l'erreur que j'ai commise :

60 twips => 2 pixels au lieu de 4
90 twips => 3 pixels au lieu de 6

il aurait été plus prudent et plus propre d'écrire :

F l o o d F i l l Form1.Picture1.hDC, _
(x + 60) / Screen.TwipsPerPixelX, _
(y + 90) / Screen.TwipsPerPixelY, _
0

--

Cordialement,

Jacques.


Avatar
Jacques93
Arnaud a écrit :
Magnifique Jaques93 , ca fontionne :o)

Mille merci




Merci du retour :-)

--

Cordialement,

Jacques.