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

colorier 1 figure géométrique tracée ???

4 réponses
Avatar
LE TROLL
Bonjour,

Je fais une traçage d'une figure géométrique (un arc de cercle), mais je
n'arrive pas à le colorer à l'aide de FillStyle, voici :

Form11.ScaleMode = vbpixel
rayon = 170
centreX = ScaleWidth / 2
centreY = 280
debut = lever * 3.14 / 180 ' radian
fin = coucher * 3.14 / 180 ' radian
FillColor = QBColor(15) ' blanc
FillStyle = 0 ' remplit (blanc)
Circle (centreX, centreY), rayon

' cercle OK en blanc plein !
' sur le même cercle je trace désormais une part de camembert d'un autre
couleur remplie.
'------------début du problème :

FillColor = QBColor(9) ' passe en bleu
sinus = Sin(debut)
cosinus = Cos(debut)
pointX = rayon * cosinus + centreX
pointY = centreY - rayon * sinus
Line (pointX, pointY)-(centreX, centreY), QBColor(9) ' 1e ligne arc
centre-bord
Circle (centreX, centreY), rayon, QBColor(9), debut, fin ' arc cercle
sinus = Sin(fin)
cosinus = Cos(fin)
pointX = rayon * cosinus + centreX
pointY = centreY - rayon * sinus
Line (pointX, pointY)-(centreX, centreY), QBColor(9) ' 2e ligne arc
centre-bord
FillStyle = 1 ' fin style remplissage
---------fin---------

Alors, je fais une cercle plein en blanc = OK, puis sur ce même cercle,
je veux faire une part de camembert d'une autre couleur (bleu), alors je
trace ma ligne 1 (du centre au bord du cercle), puis l'arc du cercle, puis
la seconde ligne fermante... mais hélas, ma figure n'est pas colorée en son
milieu ??? Mal fermée ??? Oublié quelque chose ???

Si vous avez une idée ???

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------

4 réponses

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

Je fais une traçage d'une figure géométrique (un arc de cercle), mais je
n'arrive pas à le colorer à l'aide de FillStyle, voici :

Form11.ScaleMode = vbpixel
rayon = 170
centreX = ScaleWidth / 2
centreY = 280
debut = lever * 3.14 / 180 ' radian
fin = coucher * 3.14 / 180 ' radian
FillColor = QBColor(15) ' blanc
FillStyle = 0 ' remplit (blanc)
Circle (centreX, centreY), rayon

' cercle OK en blanc plein !
' sur le même cercle je trace désormais une part de camembert d'un autre
couleur remplie.
'------------début du problème :

FillColor = QBColor(9) ' passe en bleu
sinus = Sin(debut)
cosinus = Cos(debut)
pointX = rayon * cosinus + centreX
pointY = centreY - rayon * sinus
Line (pointX, pointY)-(centreX, centreY), QBColor(9) ' 1e ligne arc
centre-bord
Circle (centreX, centreY), rayon, QBColor(9), debut, fin ' arc cercle
sinus = Sin(fin)
cosinus = Cos(fin)
pointX = rayon * cosinus + centreX
pointY = centreY - rayon * sinus
Line (pointX, pointY)-(centreX, centreY), QBColor(9) ' 2e ligne arc
centre-bord
FillStyle = 1 ' fin style remplissage
---------fin---------

Alors, je fais une cercle plein en blanc = OK, puis sur ce même cercle,
je veux faire une part de camembert d'une autre couleur (bleu), alors je
trace ma ligne 1 (du centre au bord du cercle), puis l'arc du cercle, puis
la seconde ligne fermante... mais hélas, ma figure n'est pas colorée en son
milieu ??? Mal fermée ??? Oublié quelque chose ???

Si vous avez une idée ???




<Pas HS>
' ---------------------------------------------------------------------
Ma première réponse ne semblant pas passer, je reposte en remplaçant le
nom de l'API par Flo_odFill. Le mot Flo_od (sans underscore) est filtré
par les forums Microsoft. Tant qu'à filtrer, il pourrait le faire
intelligemment, si on ne peux plus citer leurs propres API ... :-(

Extrait de la discussion 'Ping en réseau' sur
microsoft.public.fr.windows.vista.general du 29/07/08 12:24 :

<Luc Burnouf [MVP]>
Exact !
Le mot "f l o o d" est interdit de cité sur le serveur de news
Microsoft,
comme "k e y g e n", "c e r b e r m a i l", "B r i t n e y S p e a r
s" et "s h i t" et sûrement d'autres mais la liste exhaustive est
inconnue.
Le pire, c'est que la tentative de publication d'un post avec un de
ces mots de le liste interdite échoue *sans* retour d'erreur du
serveur !
</Luc Burnouf [MVP]>
' ---------------------------------------------------------------------
</Pas HS>


IMPORTANT : SUPPRIMER le caractère underscore (souligné) dans *Flo_od*
---------

Tout d'abord une remarque : en ne mettant manifestement pas

Option Explicit

tu ne déclares pas tes variables, et tu utilises la constante 'vbpixel',
cette constante n'existe pas, donc elle est égale à zéro ce qui équivaut
à vbUser, une unité définie par l'utilisateur.

Si tu veux vraiment travailler en pixel, c'est 'vbPixels' (avec un s),
qu'il faut utiliser (valeur = 3).

Pour ton problème, je ne connais pas de fonction VB permettant de
remplir des zones irrégulières, par contre, il y a l'API flo_odFill :


Option Explicit

Private Declare Function CreateSolidBrush Lib "gdi32" _
(ByVal crColor As Long) As Long

Private Declare Function flo_odFill Lib "gdi32" _
(ByVal hDC As Long, ByVal x As Long, ByVal y As Long, _
ByVal crColor As Long) As Long

Private Declare Function SelectObject Lib "gdi32" _
(ByVal hDC As Long, ByVal hObject As Long) As Long

Private Declare Function DeleteObject Lib "gdi32" _
(ByVal hObject As Long) As Long



Sub LeTroll()
Dim Rayon As Single, CentreX As Single, CentreY As Single
Dim Lever As Single, Coucher As Single
Dim Debut As Single, Fin As Single
Dim Sinus As Single, Cosinus As Single
Dim PointX As Single, PointY As Single

With Form11
.ScaleMode = vbPixels
Rayon = 170
CentreX = ScaleWidth / 2
CentreY = 280
' Valeurs arbitraites
Lever = 0: Coucher = 100
Debut = Lever * 3.14 / 180 ' radian
Fin = Coucher * 3.14 / 180 ' radian
FillColor = QBColor(15) ' blanc
FillStyle = 0 ' remplit (blanc)
Circle (CentreX, CentreY), Rayon

' cercle OK en blanc plein !
' sur le même cercle je trace désormais une part de camembert d'un '
' autre couleur remplie.
'------------début du problème :

FillColor = QBColor(9) ' passe en bleu
Sinus = Sin(Debut)
Cosinus = Cos(Debut)
PointX = Rayon * Cosinus + CentreX
PointY = CentreY - Rayon * Sinus
Line (PointX, PointY)-(CentreX, CentreY), QBColor(9) ' 1e ligne arc
centre -bord
Circle (CentreX, CentreY), Rayon, QBColor(9), Debut, Fin ' arc cercle
Sinus = Sin(Fin)
Cosinus = Cos(Fin)
PointX = Rayon * Cosinus + CentreX
PointY = CentreY - Rayon * Sinus
Line (PointX, PointY)-(CentreX, CentreY), QBColor(9) ' 2e ligne
arc centre -bord
FillStyle = 1 ' fin style remplissage

'------------début de solution :

' Il faut choisir un point à l'intérieur de la zone
' à priori ici cela dépend de Lever/Coucher. A toi de trouver ...
' La couleur est celle qui délimite la zone a remplir.
flo_odVB Me.hDC, CentreX + 2, CentreY - 2, QBColor(9)
End With
End Sub


Private Sub flo_odVB(ByVal hDC As Long, _
PointX As Long, PointY As Long, _
MyColor As Long)
Dim Brush As Long, Old_Brush As Long

' Crée et sélectionne un pinceau de la couleur voulue
Brush = CreateSolidBrush(MyColor)
Old_Brush = SelectObject(hDC, Brush)

' Rempli la zone.
flo_odFill hDC, PointX, PointY, MyColor

' Détruit le pinceau
Brush = SelectObject(hDC, Old_Brush)
DeleteObject Brush
End Sub

--

Cordialement,

Jacques.
Avatar
Jacques93
Jacques93 a écrit :


Private Declare Function flo_odFill Lib "gdi32" _
(ByVal hDC As Long, ByVal x As Long, ByVal y As Long, _
ByVal crColor As Long) As Long




Pffff...

Mettre un F majuscule et supprimer le caractère _ :

Private Declare Function Flo_odFill Lib "gdi32" _
(ByVal hDC As Long, ByVal x As Long, ByVal y As Long, _
ByVal crColor As Long) As Long

sinon le point d'entrée dans la dll gdi32 ne sera pas trouvé.

--

Cordialement,

Jacques.
Avatar
LE TROLL
Bonjour Jacques,

Tu es de permanence ou le seul survivant...

Merci, merci...
Oui, erreur sur la constante (noté), mais pas pour l'option explicit, je ne
pouvais pas le faire, car j'ai repiqué un programme en QB qui est truffé de
variables déclarées en cours et réutilisées selon parfois des types
différents, alors ça faisait trop de boulot de tout nettoyer...

Je ne savais pas qu'il y avait des mots-clefs interdits, mais pourquoi
Microsoft interdirait-il de mettre le nom de ses API's ???

J'étudie ta réponse, merci...


--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Jacques93" a écrit dans le message de news:
%23lGXswH$
| Jacques93 a écrit :
|
| >
| > Private Declare Function flo_odFill Lib "gdi32" _
| > (ByVal hDC As Long, ByVal x As Long, ByVal y As Long, _
| > ByVal crColor As Long) As Long
| >
|
| Pffff...
|
| Mettre un F majuscule et supprimer le caractère _ :
|
| Private Declare Function Flo_odFill Lib "gdi32" _
| (ByVal hDC As Long, ByVal x As Long, ByVal y As Long, _
| ByVal crColor As Long) As Long
|
| sinon le point d'entrée dans la dll gdi32 ne sera pas trouvé.
|
| --
|
| Cordialement,
|
| Jacques.
Avatar
Jacques93
LE TROLL a écrit :
Bonjour Jacques,

Tu es de permanence ou le seul survivant...



Non, non les arbres bougent encore ! Y'a un peu de vent :-D

Les dernières permanences que j'ai faites étaient pour l'an 2000, et le
passage à l'€uro. On devait être joignable 24/24, mais justement on
gagnait pas mal d'€uros.

Je serai pas là pour le prochain millénaire :-(


Merci, merci...
Oui, erreur sur la constante (noté), mais pas pour l'option explicit, je ne
pouvais pas le faire, car j'ai repiqué un programme en QB qui est truffé de
variables déclarées en cours et réutilisées selon parfois des types
différents, alors ça faisait trop de boulot de tout nettoyer...



OK

Je ne savais pas qu'il y avait des mots-clefs interdits, mais pourquoi
Microsoft interdirait-il de mettre le nom de ses API's ???




ça je ne sais pas, mais ce n'est le nom des API's de manière directe.
Les messages qui contiennent certains termes, comme l'a indiqué Luc :

"f l o o d"
"k e y g e n"
"c e r b e r m a i l"
"B r i t n e y S p e a r s"
"s h i t"

sont bloqués !

NB : De tout façon B.S. n'a pas publié la liste de ses API's ;-)

Si je cite B.S. c'est parce qu'il me semble qu'un message de Jean-Claude
Bellamy, certes parfois un peu taquin, a été bloqué à cause de ça, et
Luc avait trouvé la cause.

D'autres intervenants ont peut être répondu, mais "F i l l F l o o d",
s'il était dans leur message, sans espace, auront été bloqués.

--

Cordialement,

Jacques.