Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CONTROLE PERSO (*.CTL) --> PROGRESSBAR STYLÉE XP TRÈS PERSONNALISABLE


Information sur la source

Catégorie :Control Classé sous : progressbar, ocx, ctl, contrôle, dégradé Niveau : Débutant Date de création : 20/09/2006 Date de mise à jour : 22/09/2006 21:53:01 Vu / téléchargé: 5 197 / 1 336

Note :
9,38 / 10 - par 8 personnes
9,38 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (28)
Ajouter un commentaire et/ou une note


Description

Cliquez pour voir la capture en taille normale
Il existe déjà plusieurs sources de ce genre, mais le nombre de propriétés de ce controle est assez (plus) important.

Il existe de plus une fonction particulière (qui est d'ailleurs le but premier de ce contrôle) : il s'agit de pouvoir changer (si l'on veut) la valeur du ProgressBar par survol de la souris (et, si désiré, clic d'un des boutons de la souris). Rien de très méchant, mais c'est toujours intéressant de l'avoir.

Fonction intéressante : possibilité de mettre une image de fond et/ou une image qui se stretche avec la progressbar (voir capture pour comprendre).

Gestion de valeurs DECIMALES (Double), mais il faut donner les chiffres décimaux avec une VIRGULE et non un point DANS LA BOITE DE PROPRIETES du contrôle (mais un point normal si vous changez les valeurs dans le code).


C'est encore en construction, mais les propriétés suivantes sont déjà terminées et opérationnelles :
'-Min --> valeur minimale (double)
'-Max --> valeur maximale (double)
'-Value --> valeur active (double)
'-InteractiveControl --> activer ou non la gestion de la valeur lors d'un mousemove
'de la souris sur le contrôle (boolean)
'-ShowLabel --> type d'affichage du label. No=rien, PercentageMode=pourcentage
'et ValueMode=valeur active
'-RightColor --> couleur de droite du dégradé de la barre de valeur (long)
'-LeftColor --> couleur de gauche du dégradé de la barre de valeur (long)
'-BackColorBottom --> couleur du bas du dégradé du fond de contrôle (long)
'-BackColorTop --> couleur du haut du dégradé du fond de contrôle (long)
'-Fonte --> choix de la fonte (stdFont)
'-Degrade --> type de dégradé de la barre de valeur. AllLengh=dégradé avec
'bord droit de couleur RightColor pour value=max.  OnlyValue=dégradé avec
'bord droit de couleur RightColor pour toutes les values.
'-InteractiveButton --> bouton gérant l'interaction
'NoButton=MouseMove uniquement, les autres boutons correspondent aux boutons
'de la souris.
'-RoundColor --> afficher le contour du controle (boolean)
'-RoundColorValue --> couleur du contour du contrôle (long)
'-LabelColor --> couleur du texte à afficher (long)
'-LabelDecimals --> nombre de décimales à afficher pour le pourcentage
'-BorderStyle --> style d'affichage (3D ou non)
'-Alignement --> position du label dans le control
'-OffSetX --> valeur de décalage horizontal du caption en PIXEL (long)
'-OffSetY --> valeur de décalage vertical du caption en PIXEL (long)
'les offsets positifs décalent vers le bas et le haut
'-BackPicture --> définit la picture affichée en fond de contrôle
'-FrontPicture --> définit la picture affichée en tant que barre de progression


Le contrôle gère les évênements suivants :
'-MouseMove
'-MouseDown
'-MouseUp
'-KeyDown
'-KeyUp
'-Click
'-DoubleClick
'-Change
'-KeyPress
'-InteractionComplete
'-ValueIsMax
'-ValueIsMin


Prévu de faire :
'-choix de l'orientation gauche/droite/haut/bas de la barre de valeur
'-ajout d'une form de configuration
'-ajout d'une liste de valeurs (par l'utilisateur) créant un évênement


Note : l'OCX est FOURNI dans le *.zip
 

Conclusion

Commentaires, critiques construites, encouragements, remarques, questions....etc sont les bienvenus ;)

De même, si vous avez des idées pour améliorer et rendre plus complet ce projet, n'hésitez pas !

@+ et merci.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

21 septembre 2006 00:29:49 :
Bug corrigé, bugs mineurs virés, code sans mauvaise gestion des erreurs. Projet groupe, facilite la création du *.ocx (fourni).
21 septembre 2006 20:57:55 :
Ajout des commentaires sur les propriétés - affichage d'un vrai "A propos" (thx Renfield) Le reste suivra plus tard ;)
22 septembre 2006 19:51:39 :
MAJ importante ==> correction d'un bug dans la gestion de la valeur Min.
22 septembre 2006 21:53:01 :
Ajout de la possibilité de mettre des images dans le fond et en tant que barre.

Commentaires et avis

signaler à un administrateur
Commentaire de draluorg le 20/09/2006 23:22:08

Salut,

Le j'aime bien le rendu ^^

Par contre si je compile et que j'execute, ca plante la fenetre ne se lance pas et il tourne a 50% Cpu!

Sinon pour la fonction pour faire avancer en deplacant la souris dessus, ce serait plus pratique si ca le faisait que quand on maintient le clic gauche enfonce (enfin je trouve)

Encore un ptit truc si en deplacant la souris, je ne parvient pas a mettre a 100% ca s'arrete a 99,45%

Bonne continuation
++

signaler à un administrateur
Commentaire de violent_ken le 20/09/2006 23:27:47

Salut !

Alors,
-pour la compilation (en *.ocx je suppose), je vais voir çà, c'est bizarre...
-pour le déplacement de la souris, la propriété InteractiveButton permet de déterminer le boutton à maintenir pour activer le changement de value par MouseMove (donc mettre par exemple LeftButton pour un meilleur confort)
-pour les 99.45%, c'est dû au fait que l'arrondi du nombre de pixel par rapport au nombre dMax n'est pas parfait... mais je vais essayer de changer çà.



En fait, ce contrôle remplace une progressbar, mais aussi une ScrollBar (quand elle est utilisée pour sélectionner une valeur entre un min et un max).


@+

signaler à un administrateur
Commentaire de draluorg le 20/09/2006 23:31:25

Eh non pas en ocx, quand je compile le projet simplement.

ok pour le deplacement de la souris, j'ai pas vu qu'on pouvait modifier :/

++

signaler à un administrateur
Commentaire de violent_ken le 20/09/2006 23:33:09

Damn, le projet compilé ??? Gros problème donc ... (O_o')

Chez moi çà tourne... je corrige çà au plus vite.... Oo

Merci de me l'avoir indiqué !
@+

signaler à un administrateur
Commentaire de violent_ken le 21/09/2006 00:31:11

Tous les problèmes sont réglés.
@+

signaler à un administrateur
Commentaire de Renfield le 21/09/2006 07:38:57 administrateur CS

Sympa, ton contrôle





Je sais que j'en utilises moi même parfois trop, mais certaines APIs pourraient te simplifier la vie.
nottament dans le cadre des dégradés.
Si tu tiens a conserver ta procédure perso, une amélioration possible de la chose serait de précalculer tes dégradés. stocker dans un tableau les couleurs a afficher.

Pour la propriété About...
fais en plutôt une procédure.
ensuite, modifie ses attributs (Outils > Attributs de procédure > Avancés>>) et change  son ID en 'AboutBox')

Modifier la font ne force pas le Refresh
la font est un peux particulière a gérer. Elle génère un évenement FontChanged lorsque  l'on modifie une des propriétés de la Font (Font.Bold, par exemple)
il faut donc trouver :

            Private WithEvents moFont As StdFont
            
            Private Sub moFont_FontChanged(ByVal PropertyName As String)
                Refresh
            End Sub
            
            Public Property Get Font() As StdFont
                Set Font = moFont
            End Property
            Public Property Set Font(Font As StdFont)
                Set moFont = Font
                Set UserControl.Font = moFont
                Refresh
            End Property
    et l'enregistrement/restauration des paramètres :
            ...
            Set Me.Font = Ambient.Font
            ...
            Set Me.Font = PropBag.ReadProperty("Font", Ambient.Font)
            ...
            Call PropBag.WriteProperty("Font", Me.Font, Ambient.Font)
RoundColor n'appelle pas le Refresh (qui étrangement invoque UserControl_Resize dans le GET)
idem pour LeftColor,RightColor,ShowLabel

signaler à un administrateur
Commentaire de draluorg le 21/09/2006 11:20:54

En effet ca marche nikkel now ^^

Par contre est-ce vraiment la peine de le proposer sous forme d'ocx? je preferais en tant que simple UserControl.

Sinon je la trouve vraiment bien :) je l'adopte ^^

Bonne prog a tous
++

signaler à un administrateur
Commentaire de VBGenesis le 21/09/2006 18:29:47

Whaou superbe! Et les fonctions sont très completes! Je me permettrais juste une petite suggestion: il faudrait mettre une description sur les propriétées, mais c'est juste pour fignoler! 10/10
@+

signaler à un administrateur
Commentaire de violent_ken le 21/09/2006 19:17:22

Draluord ==> Merci ;) En effet, je préfère aussi sous forme de fichier *.ctl. Mais j'ai créé le *.ocx car de toutes façons, dans le cas d'un groupe de projet, il est généré à la compilation. Mais c'est sur que le *.ctl est beaucoup moins lourd que l'ocx.

VBGenesis ==> Merci bien ;) Pour la description des propriétés, je les mettrais à la prochaine MAJ.

Renfiled ==> Oui, avec des APIs, ce serait surement plus optimisé. Mais j'hésite à changer. Pour le "about", c'est sur que c'est très mal propre en ce moment ;) Pour la fonte, je vais revoir çà, et merci de m'avoir signalé les absences de Refresh.



Une (au moins) MAJ sera effectuée, reste à savoir quand (du boulot en ce moment).

Merci pour tous les commentaires, @+

signaler à un administrateur
Commentaire de violent_ken le 21/09/2006 19:21:12

Renfiled, pour la dernière remarque ("RoundColor n'appelle pas le Refresh (qui étrangement invoque UserControl_Resize dans le GET)"), c'est dû au fait que le changement de contour ne se fait pas en traçant le contour, mais en laissant une marge (sur les côtés) du contrôle, pour laisser apparaitre la form du UserCOntrol (qui elle, a la couleur du contour).
Ce redimensionnement des contrôles est effectué dans le Resize.

@+

signaler à un administrateur
Commentaire de violent_ken le 21/09/2006 21:01:20

V'là la première (petite) MAJ ;)

Je gererait la propriété Font correctement, et j'ajouterais la gestion de 2 images dans le fond/barre par la suite.
@+

signaler à un administrateur
Commentaire de VBGenesis le 22/09/2006 17:49:34

Hello! J'ai trouvé un petit bug mineur: au dessus de 23, la fonction LabelDecimals fait planter ton controle, il faudrais mettre une valeur max. En tout cas, bug ou pas, moi je l'ai adopté!!
@+

signaler à un administrateur
Commentaire de violent_ken le 22/09/2006 19:04:03

VBGenesis ==> Merci beaucoup ;) Je ferais la correction de ce bug à la prochaine mise à jour ^_^

@+

signaler à un administrateur
Commentaire de violent_ken le 22/09/2006 19:56:58

Mise à jour importante ==> suppression d'un bug sur la gestion de la valeur Min.
@+

signaler à un administrateur
Commentaire de violent_ken le 22/09/2006 22:00:18

Bon, voilà une grosse MAJ qui figera cette source un moment.

Possibilité d'ajouter une image de fond et/ou une image qui se stretche en fonction de pgrbar.Value (cette image remplace la barre de progression).
Essayez de passer le contrôle qui a les images en pgrbar(10).InteractiveControl=True, honêtement çà rend pas mal du tout ^_-


@+

et dsl d'avoir floodé tant de posts sur ma propre source (O_o')

signaler à un administrateur
Commentaire de njakapiso le 25/09/2006 10:47:17

ça marche bien .et je ne trouve pas de mal a tous tes codes
njaka(madagascar)

signaler à un administrateur
Commentaire de philbar71 le 25/09/2006 17:45:41

Bonjour et BRAVO pour ce joli travail !
Je cherche aussi une routine simple à mettre en oeuvre pour lier la ProgressBar à un chargement ou une sauvegarde de fichiers.
Ca devrait donc être constitué un peu de cette manière:
1) Trouver le poids total des fichiers à charger ou sauver.
2) Faire avancer la progresBar en fonction du pourcentage de progression.
J'avais trouvé un truc de ce genre dans une source, mais c'était extrêmement complexe à manipuler (avec plein de sub() et je suis persuadé qu'on doit pouvoir faire plus simple, mais je manque de temps pour chercher une autre solution.
Dans le même ordre d'idée je cherche une routine pour sauvegarde une image au format JPG. Là aussi j'en avais trouvé une hyper complexe et mal documentée que j'ai réussi à incorporer à un projet, mais elle comportait aussi d'autres fonctions dont je n'avais pas besoin et je n'ai pas su élaguer ce qui était inutile.
Nota : Je n'ai pas besoin de la possibilité de réglage du taux de compression. Une valeur standard me suffirait.

Encore bravo pour ce superbe OCX

signaler à un administrateur
Commentaire de VBGenesis le 25/09/2006 19:10:39

Salut PHILBAR71, tout d'abord quand tu veux poser une question va dans le forum, c'est mieux. En ce qui concerne le chargement de fichiers liés a une progressebar, je ne sais pas mais pour sauver une image tu peux utiliser la function SavePicture:

SavePicture(Picture as picture, FileName as string)

Elle est présente dans les fonctions globales de VB6, de même que Load picture qui fait l'inverse.

Voila j'espere que cela te conviendra mais pense à utiliser le forum la prochaine fois!

VBGenesis

signaler à un administrateur
Commentaire de philbar71 le 25/09/2006 19:30:44

Merci bien Genesis, mais ça ne répond pas à ma question de sauvegarde en JPG car SavePicture ne connaît que le format BMP.

Cela dit, tu as raison, je vais reformuler ma question sur le forum.
J'avais posté ici car je pensais que Violent_Ken pouvait être capable de me répondre et que ma principale question était relative à l'usage de sa ProgressBar.
Nota : Je programme en VB6.

Philbar71

signaler à un administrateur
Commentaire de violent_ken le 25/09/2006 19:40:50

Salut à tous, merci pour vos commentaires ;)

Je vais être assez bref, j'ai beaucoup de boulot -_-

Pour le chargement/sauvegarde de fichier, plusieurs possibilités :
1) tu sauvegardes 1 seul fichier dont tu connais la taille par avance, tu règles alors progressbar.Max=Taille_fichier (octets), progressbar.Min=0, et tu changes progressbar.Value à chaque fois que tu écris dans le fichier (dans la boucle Open....)
2) tu sauvegardes plusieurs fichiers : pareil, mais progressbar.Max=Somme( taille de chaque fichier)
3) tu ouvres 1 fichier, alors tu récupères sa taille (taille=FileLen("c:\mon_fichier.txt"), et tu règles progressbar.Max=taille, progressbar.Min=0, et tu changes progressbar.Value dans ta boucle Open...
4) ouverture de plusieurs fichiers, pareil mais progressbar.Max=Somme(taille de chaque fichier)
5) tu ouvres/sauvegardes un grand nombre de fichiers (genre + de 6), tu peux passer progressbar.ShowLabel=Steps et augmenter progressbar.Value à chaque fichiers qui a été ouvert/enregistré (avec progressbar.Max=nombre de fichiers)
6) tu utilises uen richtextbox ou un truc dans ce genre, et donc tu ne peux pas récupérer l'état d'avancement de la sauvegarde/loading
7) j'ai pas répondu à la question ==> donc je ne l'ai pas comprise, désolé ^^



Pour le fichier à sauvegarder en *.jpg, tu utilises soit :
-une dll pour sauvegarder en jpeg (cherche sur le Net)
-une classe pour sauvegarder en jpeg (cherche "classe jpeg" sur vbfrance ou sur le Net)


@+, bonne prog.

signaler à un administrateur
Commentaire de philbar71 le 25/09/2006 20:27:02

Merci Violent_Ken,

Ce sont précisément les réponses que j'attendais et je vais très bien me débrouiller avec ça.

Nota : Suivant les conseils de Genesis, j'avais déjà re-posté ma question sur le forum, mais je me rends compte maintenant que c'était inutile puisque, comme je le pensais, tu étais tout à fait compétent pour le faire sans avoir à ouvrir un topic pour ça.

Encore Bravo et merci !

signaler à un administrateur
Commentaire de violent_ken le 25/09/2006 20:28:47

Nickel si çà te convient ^_-

Merci, @+

signaler à un administrateur
Commentaire de VBGenesis le 25/09/2006 20:57:01

Excuse Philbar, je croyais que SavePicture sauvait en JPG pas en BMP ;) Bah j'aurais appris un truc!
@+

signaler à un administrateur
Commentaire de patrick532 le 26/09/2006 23:18:41

salut,  très belle source. 10/10

signaler à un administrateur
Commentaire de philbar71 le 28/09/2006 20:29:32

Salut Violent_Ken,

Je viens de terminer le prog dont j'avais parlé et j'y ai incorporé ta progressBar.
Elle n'apparaît que quand on fait une conversion en série, mais elle est bien là ;-)
J'ai mis mon prog sur ce site et tu peux le trouver facilement. Le Prog s'appelle "ConvertImg" et utilise GDI+

à bientôt,
Philbar71

signaler à un administrateur
Commentaire de lex1111 le 06/11/2006 02:04:49

excellent ton ocx, j'adore 10/10

signaler à un administrateur
Commentaire de ghuysmans99 le 18/04/2007 19:14:12

sublîme

signaler à un administrateur
Commentaire de violent_ken le 17/05/2007 17:21:36

Faites donc un petit tour ici ^^
http://www.vbfrance.com/code.aspx?ID=42726

Vous trouverez ce contrôle plus une dizaine d'autres au style XP ;)

@+

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

MSCOMCTL.OCX [ par zekmek ] Depuis que j'ai rajouté une progressbar dans mon form j'ai ce message qui se lance a l'execution... MSCOMCTL.OCX; en effet pour inclure ma progressbar Msinet.ocx et licence :( [ par ZBob ] Bonjour à tous,Je veux récupérer le code source d'une page web et d'après mes recherches je dois utiliser le contrôle Inet. Primo je me rends compte q Contrôle OCX pour compresser en ZIP [ par Matt2k ] Je développe actuellement pour les besoins de mon site internet un programme qui compresse tous les fichiers d'un répertoire dans des fichiers .ZIP (u OCX Multi-instances [ par Rene ] J'ai créé un contrôle ActiveX qui utilise des Form se partageant des variables publiques d'un module.Pb dans un projet utilisant plusieurs instances d Contrôle OCX pas correctement licencié [ par MattDaft ] je suis sous VBA (et VB.net) sous WinXP et l'utilisation de la moitié des contrôles OCX me retourne une erreur du type "Le contôle n'a pas été créé pa Comment utiliser un contrôle ocx????????????? [ par stagiaireiut ] Un controle ocx correspondant à ce que je dois faire (appli en vba access) est disponible sur le lien suivant: http://www.vbfrance.com/article.aspx?Va Problème de chargement de bibliothèque !! (mscom..) [ par philcam ] Salut à tous,je viens de réinstaller XP et vb6, et quand je charge un projet contenant le contrôle DTpicker, un message me dit que la bibliothèque n'e Comment déclarer plusieurs instances d'un OCX [ par wanbao ] Bonjour, Je développe une application permettant de dialoguer avec les différents ports COM. Afin de me faciliter la tâche, j'ai créer un contrôle Ac ajout de menu par controle ocx??? [ par wico2002 ] Je veux faire un contrôle (ocx) dans lequel il y a un common control dialog. quand j'ajoute ce contrôle , je veux que des menus soientt crées automati impossible de charger un composant ocx [ par casav ] Je veux charger le composant microsoft windows common control 5 (comctl32.ocx) or a chaque fois il me met "impossible de charger donc le contrôle imag


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 2,324 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.