Info-bulle personnalisée, multilignes avec qq optons

Description

Après une petite recherche sur VbFrance, j?ai trouvé qq codes (info-bulle, ToolTips), mais ils ne correspondaient pas exactement à mes critères d?utilisation.
Alors j?ai développé ce code source que je poste ici, toutes les remarques et suggestions sont les bienvenus

Testé sous Win98SE et Win2000

Ce code source n'est pas une application de construction d'info-bulle, mais un exemple d?utilisation.

Propriétés prise en charge par l?info-bulle :
- Couleur, police, taille du texte
- Réglage de la largeur de l?info-bulle
- Remplacer, une couleur par une autre
- Sélectionner, une couleur pour la rendre transparente
- Possibilité de mettre vos propres formats d?info-bulle
- Réglages de décalages individualisés pour la souris, et de tous les éléments interne
- Option d?affichage d?un panneau et/ou d?une case fermeture
- Gestion automatique de positions du Bec, supérieur, inférieur, droite et gauche par rapport à l'objet déclencheur qui lui est divisé en 4 zones
- Gestion automatique des dépassements au cas ou l?info-bulle sorte de l?interface
- Possibilité de réglage du temps d?apparition

Temps de traitement d?apparition de l?info-bulle :
Je pense qu?en terme de temps de traitement entre le déclenchement et l?apparition de l?info-bulle est très satisfaisant. Cependant, plus le texte est important, plus l?info-bulle sera grande et donc prendra plus de temps de traitement, dépend également de la puissance de votre PC. Reste donc un peu aléatoire mais donne une idée.
Pour plus de précision, j?ai dés-activé les anti-virus/firewall, aucune application est ouverte sur le bureau, il ne reste que les progs en tâches de fond de windows et Vb6.
Les testes effectués avec le type 1 info-bulle : J?ai 2 PC,
1 win98se, PIII500, 256 Mo, disque 7200tr/min : Valeurs collectées
- sous ide Vb6 sur le Label7 : 102 millisecondes
- sous infoBulle.exe sur le Label7 : 44 millisecondes
- sous ide Vb6 sur l?image du Dahu : 445 millisecondes
- sous infoBulle.exe sur l?image du Dahu : 181 millisecondes

1 win2000server Sp4, PIII450 Mo, 512 Mo, disque 7200tr/min : Valeurs collectées
- sous Vb6 sur le Label7 : 110 millisecondes
- sous infoBulle.exe sur le Label7 : 60 millisecondes
- sous Vb6 sur l?image du Dahu : 501 millisecondes
- sous infoBulle.exe sur l?image du Dahu : 251 millisecondes

Importation des images de base et traitement :
J?ai récupéré les images de base de l?info-bulle depuis la barre de dessin dans Word (Formes automatiques, bulles et légendes). J?ai fait qq motifs sur ces bulles, je copie depuis Word et je les colles directement dans les PictureBox. Attention d?utiliser des couleurs de base (noir, blanc, ?) pour le fond et le liseret, cela facilite le remplacement de couleur.
Ces bulles sont du type graphique vectoriel, on peut aussi les importer directement dans le PictureBox sous fichier Metafile (wmf ou emf)
Les avantages de ce format sont que l?on peut beaucoup plus facilement manipuler l?image. On peut redimensionner, changer d?échelle, sans perte de qualité, sans effet d?échelle ...
Par contre, il est impossible d?avoir un rendu satisfaisant d?une photo sous ce format.
C?est ce type d?image qui m?a été permis de développer ce code source, la subtilité réside que l?image se redimensionne ou se strech en gardant les mêmes propriétés et qualité (pas d?effet de pixalisation suite à un agrandissement).
J?ai du quand même développer une procédure (RedimPictureBoxPourImage) pour redimensionner la PicturBox car BitBlits a tendance a aplatir l'image et du coup modifie qq peut la taille.
Les images des panneaux ou case fermeture sont en Gif.

Construction info-bulle
La construction de l?InfoBulle_PictureBox est un conteneur qui abrite d?autres objets comme des PictureBox (style image info-bulle, les panneaux, case fermeture), des Labels (un pour le texte et 2 autres pour les réglages).

En terme d?API, j?utilise GetDIBits et SetDIBits pour la manipulation d?image afin de récupérer les bits dans un tableau. Ceci est bien plus rapide qu'avec la manipulation GetPixel / SetPixel traditionnelle.

Pour info, le module RegionFromBitmap n?est pas de moi, j?ai juste ajouté une procédure, effectués qq modifications que j?ai signalés et dés-activé une procédure que je n?utilise pas.

Les points qui peuvent être améliorés :
Petit problème lorsque l?utilisateur déplace la souris a grande vitesse, il se produit une redondance de l?InfoBulle_Picture qui faudrait faire disparaître.

Il faudrait si possible simplifier ou rendre plus lisible la procédure Position_InfoBulle dans le module Mod_InfoBulle car actuellement, difficile de si retrouver avec les If, Else et End If. J?ai développé cette procédure sans trop y réfléchir.

Améliorer la gestion erreurs au cas ou, car je me suis pas cassé la tête, à part qq On Error Resum Next ici et là.

Source / Exemple :


'=> zip <=

Conclusion :


Pour utiliser l'info-bulle dans vos applications
Depuis la Form1, il faut récupérer :
-Une partie de la procédure Form_Load
-Toutes les procédures : Form_MouseMove, InfoBulle_Close_Click, Label7_MouseMove et Timer1_Timer
Attention, si vous mettez vos propres images info-bulle, il faudra revoir les positionnements, décalages, couleurs, etc..
-Il faut également récupérer les deux modules

J?espère ne pas avoir fait trop d?erreurs dans le développement de ce code source, si vous constatez des problèmes de fonctionnement ou si vous apportez des améliorations, alors welcome.

Je pense que ce code est facilement modifiable pour vos projets, avec des possibilités et des options intéressantes. Cela peut être un bon point de départ
Il serait facile d?en faire un OCX.

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.