Composant bar de volume

Soyez le premier à donner votre avis sur cette source.

Vue 10 481 fois - Téléchargée 1 064 fois

Description

C'est un composant .net 2005 qui ressemble au bar de volume qui sont dans tous les lecteurs audio/vidéo.
Ce code a deux intérêts:
-Tout d'abord il montre aux débutants comment créer des composants possédant des évènements et des propriétés personalisés.
-Il montre également comment utlisier des images transparentes pour les afficher aux dessus d'une autre grâce à un Panel.
-Il permet également de comprendre l'utilisation des buffers.
N'hésitez pas à laisser des commentaire pour toute remarque.

Source / Exemple :


Public Class VolumeBar
    Private rect As System.Drawing.Rectangle
    Private bufferG As BufferedGraphics
    Private color As Color
    Public Event Change_Value(ByVal value As Integer) 'Déclare l'évenement de changement de valeur
    Private pos As Integer 'C'est la position de la boule orange par rapport au Panel1
    Private Sub VolumeBar_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        pos = 50 'Par défault, le volume est au maximum
        bufferG = BufferedGraphicsManager.Current.Allocate(Panel1.CreateGraphics(), Panel1.DisplayRectangle)
    End Sub
    Private Sub Panel1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseMove
        If e.Button <> Windows.Forms.MouseButtons.None Then 'si un bouton est appuyé...
            pos = e.Location.X - 4 '...alors on met à jour la variable qui
            ' contient la postion de la boule.Le -4 sert à centrer la boule par rapport à la souris
            If pos < 2 Then
                pos = 2 'Permet de ne pas sortir de la form à gauche
            ElseIf pos > 50 Then
                pos = 50 'Permet de ne pas sortir de la form à droite
            End If
            RaiseEvent Change_Value(value) 'Appel l'évènement change_value
            maj() 'Met à jour l'affichage du Panel1
        End If
    End Sub
    Private Sub maj()
        'définition du rectangle dans lequel doit s'afficher 
        'l'image correspondant au volume sélectioné (ici dégradé d'orange)
        rect.X = 4
        rect.Y = 0
        rect.Width = pos
        rect.Height = 15
        bufferG.Graphics.Clear(Drawing.SystemColors.Control)
        bufferG.Graphics.DrawImage(bg.Images.Item(0), 4, 0)
        'affichage l'image correspondant au volume sélectioné (ici dégradé d'orange)
        bufferG.Graphics.DrawImageUnscaledAndClipped(over.Images.Item(0), rect)
        'dessin de l'image transparente
        bufferG.Graphics.DrawImage(bar.Images.Item(0), pos, 1)
        bufferG.Render()
    End Sub
    Property value() As Integer
        Get
            value = Int((pos - 2) / 48 * 100) 'Définie la valeur du contrôl
        End Get
        Set(ByVal val As Integer) 'Permet de changer la valeur du contrôl
            pos = Int(val / 100 * 48 + 2) 'Change la position
            maj() 'Met à jour l'affichage du Panel1
        End Set
    End Property

    Private Sub VolumeBar_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        maj()
    End Sub
End Class

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
brrrr, marche pas chez moi :(
j'ai copié la DLL (généré par Vb) dans winbouze/sys32/.
puis intégré à la barre d'outil (comme je fais pour tous les autres)
je pose le control sur une form et là au lancement il me sort :

Une exception de première chance de type 'System.NullReferenceException' s'est produite dans VolumeBar.dll
détail :
"Une erreur s'est produite lors de la création du formulaire. Pour plus d'informations, consultez Exception.InnerException. L'erreur est : La référence d'objet n'est pas définie à une instance d'un objet."}

What the fuck ??? quesque je fais de travers -_-" ???

salut
Messages postés
101
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
11 janvier 2009

Problème résolu grâce à l'utilisation de buffer, voir http://www.c2i.fr/code.aspx?IDCode=613.
Merci à Stephane33
Messages postés
101
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
11 janvier 2009

J'ai essayé de le mettre au début et à la fin de cette fonction, sans résultat :(
Merci quand même de t'interresser à ton problème.
Quelqu'un aurait une autre proposition?
Messages postés
630
Date d'inscription
samedi 15 février 2003
Statut
Modérateur
Dernière intervention
9 octobre 2011
1
Peut-être que "Me.invalidate" dans l'évenement Panel1_Paint peut résoudre ce problème

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.