Potentiomètre (bouton rond qui tourne, knob) paramétrable en vb .net 2005 gdi+

Description

Dans mes développements, j'avais souvent besoin d'un contrôle de type slider mais plus esthétique, comme un bouton tournant de chaine hifi. J'utilisais auparavant un contrôle acheté, mais j'avais très envie de le remplacer par un contrôle de ma création car je pourrais modifier le source à volonté. Les exemples que j'ai trouvé ne m'ont pas convaincus, notament pour le calcul des angles, j'ai donc décidé d'en écrire un de A à Z. J'espère qu'il vous plaira!

GabKnob est donc un contrôle de type potentiomètre / knob qui peut servir par exemple pour controler un volume, ou tout ce qu'un slider traditionnel peut faire.
Il hérite de la classe UserControl, dessine dans un thread séparé et utilise GDI+.

Voici un petit aperçu des propriétés paramétrables :
- Intérieur en couleur pleine ou dégradé
- Taille du knob
- Couleurs du knob
- Type de déplacements à la souris (horizontal / vertical / circulaire)
- Taille de la bordure
- Couleur de la bordure
- Type de la bordure
- Type du témoin de position
- Taille du témoin de position
- Angle mini / angle max
- Valeur min / valeur max
- Couleur du texte de la valeur
- Conditions d'affichage de la valeur
Bien d'autres ... mais j'ai la flemme de tout écrire ^^

Un projet de test est inclu (il ne teste pas toutes les possibilités pour le moment mais reste un bon aperçu).
Ce contrôle n'est pas figé : je le mettrai à jour régulièrement. Et tout le monde peut s'en servir et le modifier à titre privé.
Vos suggestions sont les bienvenues! :) Et aussi veuillez me reporter les bugs si vous en trouvez.

!!! Remarques !!!
Pour récupérer la valeur retournée par le knob en ayant des performances OK, il FAUT passer par l'évenement KnobValueChanged et ne pas oublier de placer un petit My.Application.DoEvents() à la fin du code de l'évènement. Ne pas passer par la propriété KnobValeur.

Source / Exemple :


' Trop de code à poster, veuillez télécharger la source :)

Conclusion :


Un seul bug connu pour le moment :

En mode déplacement horizontal ou vertical seulement, si l'on utilise l'évènement KnobValueChanged et que l'on y place un My.Application.DoEvents(), il semble que le bouton "saute" sur certaines machines. Je cherche actuellement pourquoi, mais de l'aide est bienvenue! :)

Codes Sources

A voir également

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.