FAIRE DISPARAITRE DES POINTS

Signaler
Messages postés
62
Date d'inscription
dimanche 10 novembre 2002
Statut
Membre
Dernière intervention
26 juin 2008
-
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
-
Bonjour,

Je voudrais savoir s'il est possible de placer un certain nombre de points de petite taille sur une feuille ou un objet et de les faire disparaître suivant une loi de probabilité ou en ayant l'équation d'une courbe.

Merci d'avance à celui qui peut me répondre ou me donner des conseils :-)

cyberlulu

PS : je suis débutant alors si vous inscrivez du code, merci de mettre des commentaires

12 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
Le plus simple, c'est de passer par l'api SetPixel, mais comme tu es un débutant, les api doivent t'être inconnues... En fait, il s'agit d'instruction extérieure à VB qui peuvent être utilisée dans n'importe quel langage de programmation (en théorie). Va voir ma source nommée AIDE SUR LES PRINCIPALES API pour un peu plus de détail sur cette API, et demande moi ce que tu n'arrive pas à faire.

DARK SIDIOUS
0
Messages postés
62
Date d'inscription
dimanche 10 novembre 2002
Statut
Membre
Dernière intervention
26 juin 2008

J'ai regardé dans ta source ce qu'il y a sur setpixel. Si j'ai bien compris, il faut déclarer la fonction dans un module. Par contre, je ne vois pas quoi faire après pour placer un point. De plus, est-t-il possible de changer l'épaisseur des points ? Si ce n'est pas possible, je me suis demandé si je ne peut pas faire un cercle à l'aide du contrôle shape et remplit avec une couleur et de le placer à un endroit. Mais alors, je ne sais pas comment dupliquer ce shape pour en placer plusieurs à l'aide d'une boucle.

En fait, ce que j'aimerais faire, c'est placer des points (par exemple une vingtaine) et après de les faire disparaître au bout d'un certain temps à l'aide d'un timer.

Je ne sais pas si je m'y prends bien, donc si tu pourrais me donner un conseil et m'expliquer si cela est utile le principe de setpixel.

Merci
cyberlulu
0
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
Alors, l'api setpixel doit être déclarée soit dans un module classique, soit dans un module de classe (en privé) soit dans la partie générale d'une form (en privée la aussi).

Cette api te permettra de définir la couleur d'un pixel dont tu donneras les coordonnées. En gros, si tu veux faire un point noir au coordonnées (10;20) de ta form, il suffit de taper ceci :

SetPixel Form1.Hwnd, 10, 20, VbBlack

Cette fonction est pratique (et très rapide) pour dessiner 1 points, voir plusieurs, mais pas pour faire des "gros" points. A ce moment là, il vaut mieux utiliser les propriétés Circle ou Line de VB (ne t'embêtes pas avec les api, ce serait trop long à programmer...)

Si tu veux plus d'aide sur ces fonctions, réponds à ce message.

DARK SIDIOUS
0
Messages postés
62
Date d'inscription
dimanche 10 novembre 2002
Statut
Membre
Dernière intervention
26 juin 2008

Merci pour l'aide sur les api setpixel

Si j'utilise le controle shape en créant un circle, j'arrive à le placer à un endroit précis (je travaille dans un picturebox). Mais ce que je n'arrive pas, c'est à dupliquer ce point pour en placer plusieurs à intervalle régulier l'un de l'autre.

cyberlulu
0
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
Je ne crois qu'utiliser un contrôle shape soit la meilleure solution, surtout si tu utilise un contrôle Picture Box comme zone d'affichage. Utilise plutôt la propriété Circle du Picture Box pour tracer des cercles, comme ca tu pourra en faire autant que tu veux, et ca ne te mangeras pas de ressources système contrairement à un contrôle shape (tout du moins, beaucoup moins).

Ainsi, il sera plus aisé de faire des cercles à l'endroit ou tu veux.

DARK SIDIOUS
0
Messages postés
62
Date d'inscription
dimanche 10 novembre 2002
Statut
Membre
Dernière intervention
26 juin 2008

Merci pour les conseils. J'ai donc réussi à utiliser l'outil circle mais j'ai un petit problème.
Sur ma feuille, j'ai un picturebox et un bouton de commande et j'écris le code suivant :

Private Sub Form_Load() 'dimension de la feuille et position
Picture1.Width = 10050
Picture1.Height = 7455
Picture1.Top = 240
Picture1.Left = 600
End Sub

Private Sub Command1_Click()
noyau = 100
periode = 100

For x = 1 To 100
If noyau <= Picture1.Width Then
Picture1.Circle (noyau, periode), 100
ElseIf noyau > Picture1.Width Then
noyau = 100
Picture1.Circle (noyau, periode + 250), 100
noyau = 100
periode = periode + 250

End If

noyau = noyau + 250
Next

End Sub

J'utilise ce code pour placer le nombre de cercles que je veux. En changeant au début de la boucle le nombre après To, je met combien de cercles afficher. En laissant par exemple la valeur 100, à partir de la troisième ligne, les cercles sont déformés et je ne sais pas pourquoi ???

Je n'ai pas non plus trouvé (s'il est possible) comment remplir d'une couleur les cercles.
0
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
En effet, c'est vraiment bizarre, et je ne vois absolument pas d'où ca peux venir...

Pour ce qui est du remplissage d'un cercle, tu ne peux pas le faire directement. La méthode la plus pratique, c'est de dessiner des cercles à l'intérieur du cercle tracé, tout simplement.

Autre petit conseil : Utilise le ScaleMode en Pixel, et non en Twips, c'est moins précis, mais plus pratique (et là, ton problème de taille disparaît, c'est bizarre)

DARK SIDIOUS
0
Messages postés
62
Date d'inscription
dimanche 10 novembre 2002
Statut
Membre
Dernière intervention
26 juin 2008

J'ai utilisé le scalemode en pixel et là je n'ai effectivement plus de problèmes : merci pour le conseil :-) Mais je ne vois pas comment faire pour tracer des cercles à l'intérieur d'un cercle.

Après avoir placé les cercles, j'aimerais savoir qu'est-ce qu'il y a comme méthode pour faire changer les cercles de couleur suivant un temps donné (faut-il utiliser un timer, si oui comment ?)

cyberlulu
0
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
Alors, pour remplir un cercle, tu peux toujours faire ceci :

Dim DOU_For1 As Double

For DOU_For1 = 0 To 50 Step 1

Picture1.Circle (50, 50), DOU_For1, vbWhite

Next DOU_For1

Le seul problème, c'est que c'est assez lent sur des très grands cercles, et de plus, certains pixels ne sont pas coloriés.

Le meilleur moyen, et sûrement le plus rapide, c'est de faire appel à l'api FloodFill. Voilà comment faire :

Déclare l'api dans ta form, ou dans un module avec l'api setpixel également :

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

noyau = 100
periode = 100

Picture1.ForeColor = vbblack

For x = 1 To 100
If noyau <= Picture1.Width Then
Picture1.Circle (noyau, periode), 100
ElseIf noyau > Picture1.Width Then
noyau = 100
Picture1.Circle (noyau, periode + 250), 100
floodfill picture1.hwnd, noyau, periode, setpixel(picture1.hwnd, noyau, période)
noyau = 100
periode = periode + 250

End If

noyau = noyau + 250
Next

Bon je n'ai pas testé cette source, donc si ca ne marche pas, réponds à ce message.

DARK SIDIOUS
0
Messages postés
62
Date d'inscription
dimanche 10 novembre 2002
Statut
Membre
Dernière intervention
26 juin 2008

J'avais réussi à remplir les cercles avec d'autres cercles à l'intérieur, et effectivement il y a des endroits pas coloriés.
J'ai essayé le code avec l'api floodfill mais ça ne fonctionne pas. J'ai regardé dans msdn et dans ta source sur les api mais je ne vois pas du tout ce qui ne fonctionne pas ???
0
Messages postés
62
Date d'inscription
dimanche 10 novembre 2002
Statut
Membre
Dernière intervention
26 juin 2008

J'avais réussi à remplir les cercles avec d'autres cercles à l'intérieur, et effectivement il y a des endroits pas coloriés.
J'ai essayé le code avec l'api floodfill mais ça ne fonctionne pas. J'ai regardé dans msdn et dans ta source sur les api mais je ne vois pas du tout ce qui ne fonctionne pas ???
Je voudrais savoir si tu sais ce qui cloche ?

cyberlulu
0
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
Ben c'est bizarre, même avec mon code ca ne marche pas ? Var chez moi ca marche nickel

DARK SIDIOUS
0