TRACKBAR - SLIDER VB.NET

Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 - 6 oct. 2007 à 11:51
sankasssss Messages postés 12 Date d'inscription lundi 15 janvier 2007 Statut Membre Dernière intervention 28 janvier 2008 - 5 juil. 2012 à 20:32
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/44289-trackbar-slider-vb-net

sankasssss Messages postés 12 Date d'inscription lundi 15 janvier 2007 Statut Membre Dernière intervention 28 janvier 2008
5 juil. 2012 à 20:32
De rien, et encore merci pour la source.
cs_lapix Messages postés 34 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 14 juin 2023 1
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és 12 Date d'inscription lundi 15 janvier 2007 Statut Membre Dernière intervention 28 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és 12 Date d'inscription lundi 15 janvier 2007 Statut Membre Dernière intervention 28 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és 12 Date d'inscription lundi 15 janvier 2007 Statut Membre Dernière intervention 28 janvier 2008
2 juil. 2012 à 17:44
Très bon composant bien codé.
Félicitations.
cs_lapix Messages postés 34 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 14 juin 2023 1
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és 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
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és 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
27 avril 2012 à 08:10
Merci lapix (:
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
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és 34 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 14 juin 2023 1
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és 7 Date d'inscription mardi 13 décembre 2005 Statut Membre Dernière intervention 23 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és 1 Date d'inscription dimanche 11 avril 2004 Statut Membre Dernière intervention 11 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és 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
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és 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
8 juin 2009 à 08:22
Bravo, très beau contrôle, bien élaboré, code propre je met 10 sans hésiter !
yassirguitare Messages postés 29 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 3 juin 2009
1 nov. 2008 à 23:17
methode refresh() pour le clignotement
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
8 avril 2008 à 19:19
Merci l'ami ! du bon boulot que voila !!!
continue ;)
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
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és 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
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és 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
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és 34 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 14 juin 2023 1
9 oct. 2007 à 14:23
C'est fait pour ca !On partage et on avance...
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
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és 34 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 14 juin 2023 1
9 oct. 2007 à 10:51
Merci bidou

Comme je fais de l'auto formation, j'apprecie tout particulierement le commentaire
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
9 oct. 2007 à 10:18
Le résultat visuel est bon :)
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
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és 34 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 14 juin 2023 1
8 oct. 2007 à 17:51
Code mis a jour !
J'ai utilisé un peu de tout en fait...
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
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és 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
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és 34 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 14 juin 2023 1
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és 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
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és 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
6 oct. 2007 à 20:59
promis ^^
cs_lapix Messages postés 34 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 14 juin 2023 1
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és 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 2
6 oct. 2007 à 12:11
Stylé!
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
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.
++
Rejoignez-nous