sankasssss
Messages postés12Date d'inscriptionlundi 15 janvier 2007StatutMembreDernière intervention28 janvier 2008 5 juil. 2012 à 20:32
De rien, et encore merci pour la source.
cs_lapix
Messages postés34Date d'inscriptiondimanche 11 septembre 2005StatutMembreDernière intervention14 juin 20231 5 juil. 2012 à 18:52
Bonjour SanKasssss
Effectivement, je n'ai jamais, malgré différents tests, verifié cette situation
Merci pour la correction, je remonte le source corrigé
Bonne journée
sankasssss
Messages postés12Date d'inscriptionlundi 15 janvier 2007StatutMembreDernière intervention28 janvier 2008 5 juil. 2012 à 17:34
J'ai corrigé le problème, il faut ajouter + z_Minimum à la variable Combien dans OnMouseDown et OnMouseMove :
Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
If e.Button = Windows.Forms.MouseButtons.Left Then
If IsHorizontal() Then
Dim Combien As Integer = CInt((e.X - MargeH) / ((Me.Width - MargeH * 2) / (z_Maximum - z_Minimum))) + z_Minimum
'Debug.WriteLine(Combien)
If Combien <> Me.OldValue Then Me.Valeur = Combien
ElseIf Not IsHorizontal() Then
Dim Combien As Integer = CInt(((Me.Height - e.Y - MargeH) / (Me.Height - MargeH * 2)) * (z_Maximum - z_Minimum)) + z_Minimum
'Debug.WriteLine(Combien)
If Combien <> Me.OldValue Then Me.Valeur = Combien
End If
End If
MyBase.Select()
MyBase.OnMouseDown(e)
End Sub
Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
If e.Button = Windows.Forms.MouseButtons.Left Then
If IsHorizontal() Then
Dim Combien As Integer = CInt((e.X - MargeH) / ((Me.Width - MargeH * 2) / (z_Maximum - z_Minimum))) + z_Minimum
'Debug.WriteLine(Combien)
If Combien <> Me.OldValue Then Me.Valeur = Combien
ElseIf Not IsHorizontal() Then
Dim Combien As Integer = CInt(((Me.Height - e.Y - MargeH) / (Me.Height - MargeH * 2)) * (z_Maximum - z_Minimum)) + z_Minimum
'Debug.WriteLine(Combien)
If Combien <> Me.OldValue Then Me.Valeur = Combien
End If
End If
MyBase.OnMouseMove(e)
End Sub
;)
sankasssss
Messages postés12Date d'inscriptionlundi 15 janvier 2007StatutMembreDernière intervention28 janvier 2008 4 juil. 2012 à 22:32
Bonjour,
Je ne sais pas si le bug est connu mais il existe un problème lorsque l'on met un minimum.
Dès le lancement l'affichage est erroné, si vous mettez la valeur 10 dans minimum, le composant marque bien 10 mais commence 10 graduation avant la première barre du rectangle censée être celle à 10.
En déplacement, le curseur est toujours 10 plus loin que le curseur.
Je regarderai à la méthode de calcul de la valeur demain et testerai aussi s'il n'existe pas un problème avec le maximum.
Bonne nuit.
sankasssss
Messages postés12Date d'inscriptionlundi 15 janvier 2007StatutMembreDernière intervention28 janvier 2008 2 juil. 2012 à 17:44
Très bon composant bien codé.
Félicitations.
cs_lapix
Messages postés34Date d'inscriptiondimanche 11 septembre 2005StatutMembreDernière intervention14 juin 20231 28 avril 2012 à 11:28
Salut ADN
Juste pour le plaisir de partir de rien et explorer le plus de choses possibles. Je n'ai pas de contraintes de productivité donc je prend le temps et essaie de m'enrichir.
La je voulais comprendre pourquoi et comment prendre en compte les touches et notamment les fleches qui sont consacrées habituellement à d'autres taches, par exemple le changement du focus sur le controle suivant/precedent
A +
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 27 avril 2012 à 18:52
juste une question après lecture du code (tu t'es bien pris la tête à commenter ! bravo et encore merci), pourquoi ne pas avoir hérité du control track bar et surcharger le paint ?
@++ l'ami
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 27 avril 2012 à 08:10
Merci lapix (:
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 10 août 2010 à 18:02
ou en plus lui attribuer directement le focus avec getfocus() si tu veux
vraiment s'était bien cette époque, des bons controls...3ans déja..
Allez lapix encore du code ^^
cs_lapix
Messages postés34Date d'inscriptiondimanche 11 septembre 2005StatutMembreDernière intervention14 juin 20231 10 août 2010 à 14:03
Bonjour Golard
Pour obtenir ce que tu souhaites, tu paux coller ce bout de code :
Protected Overrides Sub OnMouseWheel(ByVal e As System.Windows.Forms.MouseEventArgs)
MyBase.OnMouseWheel(e)
Dim ChangeValue As Integer = CInt(e.Delta / 120) '* SystemInformation.MouseWheelScrollLines / 40)
Me._Valeur += ChangeValue
End Sub
Protected Overrides Sub OnMouseClick(ByVal e As System.Windows.Forms.MouseEventArgs)
MyBase.OnMouseClick(e)
Me.Select()
End Sub
Ca doit repondre a ta question, il suffit de cliquer une fois sur le controle pour lui donner le focus et ensuite tu peux utiliser la roulette de souris pour changer la valeur dans les bornes définies
Bonne journée
cs_Golard
Messages postés7Date d'inscriptionmardi 13 décembre 2005StatutMembreDernière intervention23 septembre 2010 10 août 2010 à 11:49
Très joli !
ça nous change de l'horrible Trackbar de vbnet qui n'est autre que le non moins horrible slider de vb6 qui lui-même semble tout droit sorti des premiers contrôles visuels des année 80 !!!
Dommage que la roulette de la souris n'agisse pas dessus comme sur le slider de vb... peux-tu améliorer ça ?
Encore bravo ! Je m'abonne au fil au cas où tu mettes à jour le source,
A +
oblykody
Messages postés1Date d'inscriptiondimanche 11 avril 2004StatutMembreDernière intervention11 août 2009 11 août 2009 à 03:47
Très beau contrôle, merci de nous pondre de belles sources comme ça !
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 8 juin 2009 à 08:26
Arf, pas pris la note je recommence(et un ptit click sur ta barre de pub ;o) )
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 8 juin 2009 à 08:22
Bravo, très beau contrôle, bien élaboré, code propre je met 10 sans hésiter !
yassirguitare
Messages postés29Date d'inscriptionmardi 20 décembre 2005StatutMembreDernière intervention 3 juin 2009 1 nov. 2008 à 23:17
methode refresh() pour le clignotement
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 8 avril 2008 à 19:19
Merci l'ami ! du bon boulot que voila !!!
continue ;)
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 12 oct. 2007 à 18:33
sinon pour info je commence à modifier ton code pour le rendre adhoc pour mes appli, je n'oublirai pas, biensur de te citer ^^. voila dés que j'ai fini je post ma source !
++ et merci bien pour tout
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 12 oct. 2007 à 10:13
Salut, une idée !
Dans modéle de couleur il manque un modéle vierge.
En effet si l'on modifie les couleurs du curseur ou du fond via les propriétés _couleurA,_couleurcurse,etc elles seront réinitalisées par la propriété _modélecouleur.
vala ++
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 10 oct. 2007 à 14:28
ok, je post ma mise à jour de ma DLL et puis j'essaye apres de compendre la différence avce une classe ;)
merci et @++
cs_lapix
Messages postés34Date d'inscriptiondimanche 11 septembre 2005StatutMembreDernière intervention14 juin 20231 9 oct. 2007 à 14:23
C'est fait pour ca !On partage et on avance...
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 9 oct. 2007 à 12:53
pareil chez moi, ca tourne nickel ! bravo
étant aussi autoditacte, ej vais me permettre de te piquer deux trois idées ;)
+
cs_lapix
Messages postés34Date d'inscriptiondimanche 11 septembre 2005StatutMembreDernière intervention14 juin 20231 9 oct. 2007 à 10:51
Merci bidou
Comme je fais de l'auto formation, j'apprecie tout particulierement le commentaire
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 9 oct. 2007 à 10:18
Le résultat visuel est bon :)
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 8 oct. 2007 à 18:44
lol cool, je l'intégre de ce pas à mes controls ;)
sinon je pense faire de même, mais avec le principe de mon control, style je change le bouton du slider avec un type.
du genre :
type 0 = bmp
type 1 = ton losange
type 2 = un rectangle avec propriété de couleur
puis aussi sur le fond de la trackbar
sacré boulot en perspective ^^, mais c'est comme cela que j'apprend lol
enfin tu vois le topo ^^
cs_lapix
Messages postés34Date d'inscriptiondimanche 11 septembre 2005StatutMembreDernière intervention14 juin 20231 8 oct. 2007 à 17:51
Code mis a jour !
J'ai utilisé un peu de tout en fait...
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 8 oct. 2007 à 16:30
gloups je viens de tester cela sur ton code et cela ne clignote plus (ya rien qui s'affiche MDR) arggg j'y pige que kouik. bonne chance ++
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 8 oct. 2007 à 16:09
C'est bon j'ai trouvé !
j'ai laissé mon code tel quel, mais j'ai changé les paramétres du control (user.form quoi) Et ça marche !!!! plus aucun clignotement !
voici les paramétres :
allowdrop = false
autoscalemode = none
autoscroll = false
autosize= false
autovalidate = DISABLE !
causevalidation = false
et surtout DOUBLEBUFFERED = TRUE ;-)
imemode = nocontrol
localizable = false
Et voila avec ça tu ne devrais plus avoir de soucis ^^
++
cs_lapix
Messages postés34Date d'inscriptiondimanche 11 septembre 2005StatutMembreDernière intervention14 juin 20231 8 oct. 2007 à 15:30
En fait je suis aussi parti sur invalidate.
Je suis en train de modifier mon code et je travaille avec :
Invalidate(Rect as rectangle) au lieu de invalidate()
dans toutes les proprietes je mets invalidate() au lieu de refresh(), et dans la propriete valeur je mets invalidate avec les coordonnées du rectangle que je veux redessiner.
En fait ca se fait par le biais d'une procedure InvalidatePartial(OldValue,Newvalue) que je cree pour que le controle ne soit rafraichi que sur cette zone là.
Pour ton cas par exemple, si ton aiguille est verticale, tu invalidate le rectangle vertical qui la contient et tu cree une nouvelle aiguille
Il y a un leger clignotement encore mais vraiment rien a voir avec le code precedent
Je ne sais pas si je suis clair. Je mets a jour mon code cet AM je pense, avec le support ca ira peut etre mieux
a te lire
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 8 oct. 2007 à 14:51
bon j'ai essayé tout un tas de trucs différents, comme dessiner dans un panel, plutot que sur la forme (http://www.codes-sources.com/code.aspx?ID=44039) mais cela fait pareil, j'ai essayé pour voir la différence entre refresh() et invalidate(), pareil :(
je séche. le pire je viens de voir que sur control gauge.ocx de VB4 (donc fait par crosoft) et ben cela clignote aussi si on change trop vite les valeurs. Donc conclusion pour ton control e tle miens il faut pas donner de valeur en temps réél si on veux que cela ne clignote pas ! c'est nul -_-
Voici les différentes version testé pour dessiner (s'il yen a d'autre je prends ^^)
Sur la form :
Private Sub UserControl1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
Try
Dim gaugepen As New Pen(couleur, epaisseur)
Dim x, y As Integer
x = (centreX) + (RayonX * Math.Cos(val_PI))
y = (centreY) - (RayonY * Math.Sin(val_PI))
e.Graphics.DrawLine(gaugepen, (centreX), (centreY), x, y)
e.Dispose()
Catch excep As Exception
Exit Sub
End Try
End Sub
ou dans un panel :
Protected Sub dessin_VU() => appellé dans le panel1.paint()
Try
Dim Graphic As System.Drawing.Graphics = Panel1.CreateGraphics
Dim gaugepen As New Pen(couleur, epaisseur)
Dim x, y As Integer
'Graphic.Clear(Color.Transparent)
x = (centreX) + (RayonX * Math.Cos(val_PI))
y = (centreY) - (RayonY * Math.Sin(val_PI))
Graphic.DrawLine(gaugepen, (centreX), (centreY), x, y)
Graphic.Dispose()
Catch excep As Exception
Exit Sub
End Try
End Sub 'dessine l'aiguille
Voila, et toi tu en est ou ?
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 6 oct. 2007 à 20:59
promis ^^
cs_lapix
Messages postés34Date d'inscriptiondimanche 11 septembre 2005StatutMembreDernière intervention14 juin 20231 6 oct. 2007 à 20:19
J'ai aussi le probleme du clignotement, je cherche sur une voie qui consisterais a tracer un bmp et l'afficher d'un coup ou un equivalent de ce genre...
Si tu trouves avant n'hesites pas a m'en faire part
cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 20132 6 oct. 2007 à 12:11
Stylé!
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 6 oct. 2007 à 11:51
j'aime bien ^^, je vais lire tout ça pour essayer d'améliorer mon control. Mais j'ai le meme soucis avec ton control que sur le miens, cela clignote sur un changement. Cela le fait chez toi ? et si oui comment virer cela ???
a te lire.
++
5 juil. 2012 à 20:32
5 juil. 2012 à 18:52
Effectivement, je n'ai jamais, malgré différents tests, verifié cette situation
Merci pour la correction, je remonte le source corrigé
Bonne journée
5 juil. 2012 à 17:34
Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
If e.Button = Windows.Forms.MouseButtons.Left Then
If IsHorizontal() Then
Dim Combien As Integer = CInt((e.X - MargeH) / ((Me.Width - MargeH * 2) / (z_Maximum - z_Minimum))) + z_Minimum
'Debug.WriteLine(Combien)
If Combien <> Me.OldValue Then Me.Valeur = Combien
ElseIf Not IsHorizontal() Then
Dim Combien As Integer = CInt(((Me.Height - e.Y - MargeH) / (Me.Height - MargeH * 2)) * (z_Maximum - z_Minimum)) + z_Minimum
'Debug.WriteLine(Combien)
If Combien <> Me.OldValue Then Me.Valeur = Combien
End If
End If
MyBase.Select()
MyBase.OnMouseDown(e)
End Sub
Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
If e.Button = Windows.Forms.MouseButtons.Left Then
If IsHorizontal() Then
Dim Combien As Integer = CInt((e.X - MargeH) / ((Me.Width - MargeH * 2) / (z_Maximum - z_Minimum))) + z_Minimum
'Debug.WriteLine(Combien)
If Combien <> Me.OldValue Then Me.Valeur = Combien
ElseIf Not IsHorizontal() Then
Dim Combien As Integer = CInt(((Me.Height - e.Y - MargeH) / (Me.Height - MargeH * 2)) * (z_Maximum - z_Minimum)) + z_Minimum
'Debug.WriteLine(Combien)
If Combien <> Me.OldValue Then Me.Valeur = Combien
End If
End If
MyBase.OnMouseMove(e)
End Sub
;)
4 juil. 2012 à 22:32
Je ne sais pas si le bug est connu mais il existe un problème lorsque l'on met un minimum.
Dès le lancement l'affichage est erroné, si vous mettez la valeur 10 dans minimum, le composant marque bien 10 mais commence 10 graduation avant la première barre du rectangle censée être celle à 10.
En déplacement, le curseur est toujours 10 plus loin que le curseur.
Je regarderai à la méthode de calcul de la valeur demain et testerai aussi s'il n'existe pas un problème avec le maximum.
Bonne nuit.
2 juil. 2012 à 17:44
Félicitations.
28 avril 2012 à 11:28
Juste pour le plaisir de partir de rien et explorer le plus de choses possibles. Je n'ai pas de contraintes de productivité donc je prend le temps et essaie de m'enrichir.
La je voulais comprendre pourquoi et comment prendre en compte les touches et notamment les fleches qui sont consacrées habituellement à d'autres taches, par exemple le changement du focus sur le controle suivant/precedent
A +
27 avril 2012 à 18:52
@++ l'ami
27 avril 2012 à 08:10
10 août 2010 à 18:02
vraiment s'était bien cette époque, des bons controls...3ans déja..
Allez lapix encore du code ^^
10 août 2010 à 14:03
Pour obtenir ce que tu souhaites, tu paux coller ce bout de code :
Protected Overrides Sub OnMouseWheel(ByVal e As System.Windows.Forms.MouseEventArgs)
MyBase.OnMouseWheel(e)
Dim ChangeValue As Integer = CInt(e.Delta / 120) '* SystemInformation.MouseWheelScrollLines / 40)
Me._Valeur += ChangeValue
End Sub
Protected Overrides Sub OnMouseClick(ByVal e As System.Windows.Forms.MouseEventArgs)
MyBase.OnMouseClick(e)
Me.Select()
End Sub
Ca doit repondre a ta question, il suffit de cliquer une fois sur le controle pour lui donner le focus et ensuite tu peux utiliser la roulette de souris pour changer la valeur dans les bornes définies
Bonne journée
10 août 2010 à 11:49
ça nous change de l'horrible Trackbar de vbnet qui n'est autre que le non moins horrible slider de vb6 qui lui-même semble tout droit sorti des premiers contrôles visuels des année 80 !!!
Dommage que la roulette de la souris n'agisse pas dessus comme sur le slider de vb... peux-tu améliorer ça ?
Encore bravo ! Je m'abonne au fil au cas où tu mettes à jour le source,
A +
11 août 2009 à 03:47
8 juin 2009 à 08:26
8 juin 2009 à 08:22
1 nov. 2008 à 23:17
8 avril 2008 à 19:19
continue ;)
12 oct. 2007 à 18:33
++ et merci bien pour tout
12 oct. 2007 à 10:13
Dans modéle de couleur il manque un modéle vierge.
En effet si l'on modifie les couleurs du curseur ou du fond via les propriétés _couleurA,_couleurcurse,etc elles seront réinitalisées par la propriété _modélecouleur.
vala ++
10 oct. 2007 à 14:28
merci et @++
9 oct. 2007 à 14:23
9 oct. 2007 à 12:53
étant aussi autoditacte, ej vais me permettre de te piquer deux trois idées ;)
+
9 oct. 2007 à 10:51
Comme je fais de l'auto formation, j'apprecie tout particulierement le commentaire
9 oct. 2007 à 10:18
8 oct. 2007 à 18:44
sinon je pense faire de même, mais avec le principe de mon control, style je change le bouton du slider avec un type.
du genre :
type 0 = bmp
type 1 = ton losange
type 2 = un rectangle avec propriété de couleur
puis aussi sur le fond de la trackbar
sacré boulot en perspective ^^, mais c'est comme cela que j'apprend lol
enfin tu vois le topo ^^
8 oct. 2007 à 17:51
J'ai utilisé un peu de tout en fait...
8 oct. 2007 à 16:30
8 oct. 2007 à 16:09
j'ai laissé mon code tel quel, mais j'ai changé les paramétres du control (user.form quoi) Et ça marche !!!! plus aucun clignotement !
voici les paramétres :
allowdrop = false
autoscalemode = none
autoscroll = false
autosize= false
autovalidate = DISABLE !
causevalidation = false
et surtout DOUBLEBUFFERED = TRUE ;-)
imemode = nocontrol
localizable = false
Et voila avec ça tu ne devrais plus avoir de soucis ^^
++
8 oct. 2007 à 15:30
Je suis en train de modifier mon code et je travaille avec :
Invalidate(Rect as rectangle) au lieu de invalidate()
dans toutes les proprietes je mets invalidate() au lieu de refresh(), et dans la propriete valeur je mets invalidate avec les coordonnées du rectangle que je veux redessiner.
En fait ca se fait par le biais d'une procedure InvalidatePartial(OldValue,Newvalue) que je cree pour que le controle ne soit rafraichi que sur cette zone là.
Pour ton cas par exemple, si ton aiguille est verticale, tu invalidate le rectangle vertical qui la contient et tu cree une nouvelle aiguille
Il y a un leger clignotement encore mais vraiment rien a voir avec le code precedent
Je ne sais pas si je suis clair. Je mets a jour mon code cet AM je pense, avec le support ca ira peut etre mieux
a te lire
8 oct. 2007 à 14:51
je séche. le pire je viens de voir que sur control gauge.ocx de VB4 (donc fait par crosoft) et ben cela clignote aussi si on change trop vite les valeurs. Donc conclusion pour ton control e tle miens il faut pas donner de valeur en temps réél si on veux que cela ne clignote pas ! c'est nul -_-
Voici les différentes version testé pour dessiner (s'il yen a d'autre je prends ^^)
Sur la form :
Private Sub UserControl1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
Try
Dim gaugepen As New Pen(couleur, epaisseur)
Dim x, y As Integer
x = (centreX) + (RayonX * Math.Cos(val_PI))
y = (centreY) - (RayonY * Math.Sin(val_PI))
e.Graphics.DrawLine(gaugepen, (centreX), (centreY), x, y)
e.Dispose()
Catch excep As Exception
Exit Sub
End Try
End Sub
ou dans un panel :
Protected Sub dessin_VU() => appellé dans le panel1.paint()
Try
Dim Graphic As System.Drawing.Graphics = Panel1.CreateGraphics
Dim gaugepen As New Pen(couleur, epaisseur)
Dim x, y As Integer
'Graphic.Clear(Color.Transparent)
x = (centreX) + (RayonX * Math.Cos(val_PI))
y = (centreY) - (RayonY * Math.Sin(val_PI))
Graphic.DrawLine(gaugepen, (centreX), (centreY), x, y)
Graphic.Dispose()
Catch excep As Exception
Exit Sub
End Try
End Sub 'dessine l'aiguille
Voila, et toi tu en est ou ?
6 oct. 2007 à 20:59
6 oct. 2007 à 20:19
Si tu trouves avant n'hesites pas a m'en faire part
6 oct. 2007 à 12:11
6 oct. 2007 à 11:51
a te lire.
++