|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||
|
Membre habitué
![]() Conseil - Consultant en systèmes d'information Inscription : octobre 2008 Messages : 212 ![]() |
Bonjour,
J'utilise depuis peu les Progress bar mais les différents modèles que j'ai testés ne me convenaient pas. Soit il est intégré dans un formulaire, soit la couleur est imposée et difficilement modifiable, ... J'ai donc décidé de m'en fabriquer un simple (sans l'utilisation d'ActiveX) avec les options que je n'ai pas trouvées ailleurs : - Pouvoir modifier facilement sa taille (longueur, hauteur) et son positionnement afin qu'il se comporte (pratiquement) comme un contrôle standard. - Pouvoir modifier facilement sa couleur. - Pouvoir l'intégrer et l'utiliser facilement dans un formulaire. J'ai choisi d'utiliser un ensemble de 2 rectangles. Un rectangle extérieur qui sert de cadre fixe au 2° rectangle intérieur dont la longueur variera en fonction de sa valeur. Pour faire un ensemble cohérent, voilà comment j'ai procédé : 1 - Créer 2 rectangles avec l'outil "Rectangle" 2 - Les nommer de façon explicite (exemple : BoiteI et BoiteE). 3 - La boite Extérieure : Apparence 3D enfoncé, couleur fond (blanc, transparent ou autre) 4 - La boité Intérieur : Apparence Ciselé (vous pouvez les paramétrer autrement mais je trouve que ça rend bien comme cela) 5 - Vous égalisez les dimensions des 2 boites, même hauteur et même largeur en utilisant les commandes classiques de mise en forme ("au plus large" et "au plus grand" par exemple) 6 - Vous superposez les 2 boites en utilisant également les commandes classiques d'alignement en prenant soin que la boite intérieure soit bien au premier plan. 7 - Vous groupez les 2 rectangles pour former un objet unique. On peut alors modifier à volonté ses dimensions et le déplacer librement sur le formulaire. La partie graphique est terminée. Cet ensemble pourra être recopié à volonté dans d'autres formulaires ou dupliquer dans le même formulaire. Attention de bien renommer les 2 rectangles pour pouvoir facilement les distinguer au niveau du code. On va s'appuyer sur un module de classe pour donner des propriétés à notre objet et pouvoir les gérer plus facilement au niveau du formulaire. Pour pouvoir générer le ProgressBar j'ai créé les propriétés suivantes : - Valeur mini - Valeur maxi - Valeur actuelle - Couleur de la barre - Longueur maxi de la barre en twips - Longueur actuelle de la barre - Référence du rectangle intérieur - Référence du rectangle extérieur - Référence du formulaire accueillant la barre Code complet du module de classe : clProgress Code :
Dans l'entête du code du formulaire Code :
Ensuite au niveau de l'utilisation (c'est un exemple): Code :
Code :
Set lPgB = oPgB(Me.Form, Me.BoitI, Me.BoitE) Code :
- la référence du formulaire actuel - les références des 2 boites (intérieure et extérieure) La fonction créé et affecte localement une instance de l'objet clProgress et lui affecte les 3 propriétés essentielles : - Le nom du formulaire appelant - Le nom de la boite intérieure - Le nom de la boite extérieure La fonction renvoie la référence de l'objet créé qui est lui même affecté à la variable locale afin de pouvoir être exploité par le code du formulaire appelant. En cas de passage d'un objet autre qu'un rectangle la fonction se met en erreur lors de la vérification des types des arguments d'entrée. En cas d'erreur dans le module de classe, l'erreur est gérée. Voilà c'est pratiquement terminé. L'objectif est atteint : - Les parties ardues du code sont dans le module de classe et dans le module, elles sont donc transparentes dans l'utilisation du formulaire - Les appels des propriétés sont simples et pratiquement similaires à celles que l'on a avec un ActiveX. - Les dimensions du ProgressBar sont facilement modifiables - On peut facilement ajouter d'autres fonctionnalités (exemples :couleur du fond du rectangle extérieur, ajout de texte à l'intérieur du rectangle, ...) Le code n'est pas vraiment optimisé mais je compte sur vous pour le rendre encore meilleur. Cordialement, |
||||||||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() Inscription : avril 2006 Messages : 1 318 ![]() |
Bonjour,
Ta contribution serait plus "vendeuse" avec une base Access jointe en exemple, je n'ai pas testé ton code par flemme... ![]() Je me souviens qu'Arkham46 avait aussi proposé une classe pour gérer une barre de progression. @+ Philippe |
|
00
|
|
|
#3 |
|
Membre habitué
![]() Conseil - Consultant en systèmes d'information Inscription : octobre 2008 Messages : 212 ![]() |
Bonjour,
Tu as raison avec un exemple c'est plus simple Si nous parlons du même code (?), celui d'Arkham46 proposait un formulaire d'attente pour les longs traitements. Ce que j'essaie de faire c'est de manipuler des contrôles simples (des rectangles dans le code proposé) en "ProgressBar" pour pouvoir les intégrer directement dans un formulaire. @+ |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com