URGENT histoire de points :-)

cyberlulu Messages postés 62 Date d'inscription dimanche 10 novembre 2002 Statut Membre Dernière intervention 26 juin 2008 - 6 janv. 2003 à 15:52
cyberlulu Messages postés 62 Date d'inscription dimanche 10 novembre 2002 Statut Membre Dernière intervention 26 juin 2008 - 7 janv. 2003 à 17:37
Je suis en train de faire un programme où j'affiche un certain nombres de cercles (avec la propriété circle) dans un picturebox. Maintenant j'aimerais faire changer ces points de couleur suivant un temps en disant par exemple qu'au bout de 10 secondes, la moitié des points a changé de couleur. Mais je ne sais pas comment je dois faire tout d'abord pour changer la couleur puis pour les faire changer suivant le temps. Faut-il utiliser un controle timer ou bien y-a-t-il une autre solution ?

Merci d'avance pour toute réponse

cyberlulu :)

14 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
6 janv. 2003 à 16:06
Est-ce que tu veux changer la couleur d'1 point, ou de tout les cercles ?

Si c'est la première solution, utilise l'api SetPixel (voir ma source AIDE SUR LES PRINCIPALES API pour plus d'info), pour changer la couleur des cercles, il faut tout retracer, ou alors, utiliser l'api FloodFill.

En tout cas, dans les 2 cas, il faut faire ca avec un timer réglé sur l'intervalle de temps que tu souhaite.

DARK SIDIOUS
0
cyberlulu Messages postés 62 Date d'inscription dimanche 10 novembre 2002 Statut Membre Dernière intervention 26 juin 2008
6 janv. 2003 à 16:31
Ce que j'aimerais changer, c'est la couleur de tout le cercle. Pour remplir les cercles de la couleur, je suppose qu'il faut aussi utiliser l'api floodfill ? Pour les api, je vais voir ça, mais je ne vois pas comment faire pour le timer. De plus, peut-on faire changer les cercles de couleur qui sont sur le picturebox de façon aléatoire, c'est-à-dire changer la couleur d'un cercle tout d'abord en haut, puis au milieu... et que l'on ne retrouve jamais la meme chose ?

cyberlulu
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
6 janv. 2003 à 16:42
Oui c'est possible. Mais il faut que tu connaisse les coordonnées de chacun de tes points pour pouvoir se servir de l'api FloodFill.
Pour le timer, c'est simple : intègre un timer dans ton projet, puis règle la propriété Interval sur la valeur (en ms) que tu souhaite.
Ensuite, tu n'as plus qu'à rentrer ton code dans l'événement Timer1_Timer()
Ainsi, ton code sera lancé à chaque intervale du timer.
Pour changer aléatoirement tes cercles, utilise la méthode Random :

Randomize Timer (pour initialiser la méthode Rnd)
Puis : Nombre = Rnd * (nombre de cercle)Ainsi, si Nombre 1, changer la couleur du premier cercle, si Nombre 2, changer la couleur du second, etc. Mais pour ca, il faut connaître les coordonnées de tes cercles !

DARK SIDIOUS
0
cyberlulu Messages postés 62 Date d'inscription dimanche 10 novembre 2002 Statut Membre Dernière intervention 26 juin 2008
6 janv. 2003 à 16:59
Quand tu parles des coordonnées des cercles, cela veut dire qu'il faut connaitre quoi ? Les coordonnées du centre, avec le rayon...

cyberlulu
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
6 janv. 2003 à 17:30
juste le centre, ou alors un point du cercle qui est coloré.
Mais au fait, est-ce que tes cercles sont pleins, càd, colorés à l'intérieur ? Si oui, tu n'aura aucun mal à te servir de l'api FloodFill, sinon, ca ne va pas être possible, et il va falloir que tu redessines tes cercles.

DARK SIDIOUS
0
cyberlulu Messages postés 62 Date d'inscription dimanche 10 novembre 2002 Statut Membre Dernière intervention 26 juin 2008
6 janv. 2003 à 17:48
J'aimerais bien faire des cercles pleins. Je pense qu'il faut aussi utiliser l'api FloodFill ?

cyberlulu
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
6 janv. 2003 à 18:05
exact, tu défini l'api floodfill de sorte que le point de référence soit un point à l'intérieur du cercle.

DARK SIDIOUS
0
cyberlulu Messages postés 62 Date d'inscription dimanche 10 novembre 2002 Statut Membre Dernière intervention 26 juin 2008
6 janv. 2003 à 18:42
ok merci pour tout !
Je vais essayer tout ce que tu m'as dit en espérant que j'y arrive !!!

cyberlulu
0
cyberlulu Messages postés 62 Date d'inscription dimanche 10 novembre 2002 Statut Membre Dernière intervention 26 juin 2008
6 janv. 2003 à 19:27
J'ai un problème avec l'utilisation de l'api floodfill. Voici mon code :

Sur la feuille, j'ai un picturebox, un textbox et un bouton de commande.

Private Declare Function FloodFill Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long

Private Sub Command1_Click()

noyau = 5
periode = 5
taille = 5

For x = 1 To Val(Text1.Text)

If noyau + 5 >= Picture1.ScaleWidth And periode + 15.5 >= Picture1.ScaleHeight Then
Picture1.Cls
End If
If noyau + 5 <= Picture1.ScaleWidth Then
Picture1.Circle (noyau, periode), taille, 200

ElseIf noyau + 5 > Picture1.ScaleWidth Then
noyau = 5
Picture1.Circle (noyau, periode + 15.5), taille, 200

noyau = 5
periode = periode + 15.5
End If

noyau = noyau + 15.5
Next

End Sub

Je ne vois pas comment utiliser l'api !
J'ai regardé sur ta source mais il n'y a que extfloodfill. Est-ce la meme chose ?
En plus, comment faire pour colorier un cercle si il faut donner le point x et le point y ?

cyberlulu
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
6 janv. 2003 à 19:34
A ce moment là, utilise extfloodfill. En fait, cette api marche comme le pot de peinture de Paint : elle colorie une zone délimitée par la couleur aux alentours : tout les pixels ayant la même couleur aux alentours sont coloriés.

DARK SIDIOUS
0
cyberlulu Messages postés 62 Date d'inscription dimanche 10 novembre 2002 Statut Membre Dernière intervention 26 juin 2008
6 janv. 2003 à 21:21
voilà mon nouveau code avec l'api extfloodfill :

Private Declare Function Extfloodfill Lib "gdi32" Alias _
                 "ExtFloodFill" (ByVal hdc As _
                 Long, ByVal XStart As _
                 Long, ByVal YStart As _
                 Long, ByVal ClrRef As _
                 Long, ByVal FillType As Long) As Long
Private Declare Function SetPixel Lib "gdi32" ( _
                 ByVal hdc As Long, _
                 ByVal x As Long, _
                 ByVal y As Long, _
                 ByVal crColor As Long) As Long

Private Sub Command1_Click()

noyau = 5
periode = 5
taille = 5

Picture1.FillColor = vbBlack

For x = 1 To Val(Text1.Text)
    
    If noyau + 5 >= Picture1.ScaleWidth And periode + 15.5 >= Picture1.ScaleHeight Then
        Picture1.Cls
    End If
    If noyau + 5 <= Picture1.ScaleWidth Then
        Picture1.Circle (noyau, periode), taille, 200
        remplissage = Extfloodfill(Picture1.hdc, SetPixel(Picture1.hdc, noyau - 5, periode, vbRed), SetPixel(Picture1.hdc, noyau + 5, periode, vbRed), vbRed, vbRed)
    ElseIf noyau + 5 > Picture1.ScaleWidth Then
        noyau = 5
        Picture1.Circle (noyau, periode + 15.5), taille, 200
        remplissage = Extfloodfill(Picture1.hdc, SetPixel(Picture1.hdc, noyau - 5, periode, vbRed), SetPixel(Picture1.hdc, noyau + 5, periode, vbRed), vbRed, vbRed)
        noyau = 5
        periode = periode + 15.5
    End If

noyau = noyau + 15.5
Next


Les cercles ne se colorient pas, je ne comprends pas pourquoi. Je ne vois pas non plus très bien comment utiliser floodfillsurface, qu'est-ce qu'il faut mettre ?
Ce serait sympa si tu pouvais me corriger le code :)
Merci

cyberlulu
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
6 janv. 2003 à 21:35
Je vais voir ce que je peux faire, mais pas avant demain matin, car là je n'ai pas le temps.

DARK SIDIOUS
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
7 janv. 2003 à 06:19
Ca y'é, je vois pourquoine marche pas.
Avecles api de la gdi32, il faut souvent crée un objet pinceau pour pouvoir définir la couleur du tracé, ainsi il faut qtu ajoutte ces quelques api dans ta partie déclaration :

Private Declare Function GetPixel Lib "gdi32" _
(ByVal hdc As Long, _
ByVal x As Long, ByVal y As Long) As Long

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

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

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

ensuite, voici le code pour remplir un cercle :

Dim LNG_Pinceau As Long
Dim col_color As ColorConstants

LNG_Pinceau = CreateSolidBrush(vbRed)
SelectObject Picture1.hdc, LNG_Pinceau
Picture1.Circle (100, 100), 100, vbRed
col_color = GetPixel(Picture1.hdc, 100, 100)
Extfloodfill Picture1.hdc, 100, 100, col_color, 1

Voilà, j'espère que tu pourras te débrouiller avec ce code.

DARK SIDIOUS
0
cyberlulu Messages postés 62 Date d'inscription dimanche 10 novembre 2002 Statut Membre Dernière intervention 26 juin 2008
7 janv. 2003 à 17:37
ok merci beaucoup. Je vais voir tout ca

cyberlulu
0
Rejoignez-nous