Alerte personnalisee style msn messenger - apparition progressive d'une form

5/5 (43 avis)

Vue 26 444 fois - Téléchargée 1 895 fois


Description


> LES FONCTIONNALITES <


Il s'agit d'une alerte du genre de celles de MSN Messenger très personnalisable.
Vous pouvez définir :
- le titre
- le message
- l'icône de l'alerte
- la vitesse de montée
- le temps d'affichage
- l'effet sonore (beep ou pas beep)
- l'effet produit lors d'un clic sur l'alerte
Le code de l'alerte est fourni avec un programme d'exemple afin de mieux comprendre son fonctionnement.

> L'UTILISATION <


Pour que l'alerte soit fonctionnelle, vous devez :
1. Ajouter l'unité "AlertMsg.pas" au projet
2. Ajouter "AlertMsg" dans la clause uses de la form qui appelera l'alerte

Ensuite, pour afficher une alerte, vous devez appeler la procédure AlertMsgBox déclarée comme suit :
AlertMsgBox(ATitle, AText: string; AIcon:integer=0; ABeep:boolean=false; WaitBeforeDown:integer=1000; StepTime:integer=10; OnTextClick:TNotifyEvent=nil);
Comme vous pouvez le remarquer, de nombreux paramètres sont acceptés de manière implicite lors de l'appel de la procédure, ce qui facilite son utilisation. Ainsi, l'appel suivant sera correct, bien que peu personnalisé :
AlertMsgBox('Titre', 'Texte');

Si une alerte est déjà en cours d'affichage lors de la demande d'affichage d'une autre alerte, l'affichage de cette dernière sera différée.

> LES PARAMETRES D'ENTREE DE LA PROCEDURE <


# Les variables d'entrée ATitle et AText sont de type string, et définissent respectivement le titre et le texte du message. Notez qu'un texte trop long ne sera pas forcément affiché en entier sur l'alerte.
# La variable d'entrée AIcon, de type integer, définit l'index de l'icône affichée lors de l'apparition de l'alerte. Des constantes ont été définies dans le code de l'alerte afin de faciliter l'utilisation des icônes dans cette procédure. En voici la liste, accompagnée de leur valeurs respectives :
ICON_NONE=0; ICON_INFO=1; ICON_QUESTION1=2; ICON_QUESTION2=3; ICON_WARNING1=4;
ICON_WARNING2=5; ICON_QUIT=6; ICON_STOP=7; ICON_GO=8; ICON_SECURE=9;
ICON_VALIDATE=10; ICON_SEARCH=11; ICON_SENDMAIL=12; ICON_NEWMAIL=13; ICON_USER=14;
# La variable ABeep, de type boolean, définit si un bip sonore doit avoir lieu lors de l'affichage de l'alerte.
# La variable WaitBeforeDown, de type integer, définit le temps (en millisecondes) d'affichage de l'alerte une fois en haut et avant la descente.
# La variable StepTime, également de type integer, définit le temps (en ms aussi) séparant deux états de la montée de l'alerte (cad. 1 pixel de différence).
# Enfin, la variable OnTextClick, de type TNotifyEvent, définit la procédure exécutée lors d'un clic sur l'alerte. Par défaut, elle équivaut à nil, c'est à dire qu'aucune procédure n'est lancée lors du clic. Si cette variable se voit assigner une procédure valide, le curseur lors du passage de la souris sur l'alerte prendra la forme d'une main et le clic sur l'alerte lancera cette procédure. Attention : pour que la procédure placée en paramètre soit valide, il faut qu'elle accepte comme seul et unique paramètre "(Sender: TObject)".
Ainsi, la procédure
MaProc;
ne sera pas valide, alors que
MaProc(Sender: TObject);
sera valide.
Cette restriction est dûe au fait que la procédure résultant de l'événement initial (le clic) est la procédure OnClick du Label, qui accepte comme paramètre (Sender: TObject).

Source / Exemple :


Définition :
AlertMsgBox(ATitle, AText: string; AIcon:integer=0; ABeep:boolean=false; WaitBeforeDown:integer=1000; StepTime:integer=10; OnTextClick:TNotifyEvent=nil);

Exemples d'appels corrects :
 AlertMsgBox('Bonjour!','Bienvenue !');
 AlertMsgBox('Attention !','Une erreur est survenue'#13#10'sur le disque.',ICON_WARNING1,true,2000,40);
 AlertMsgBox('Résultat','La recherche a abouti à'#13#10'13 résultats.',ICON_SEARCH,true);
 AlertMsgBox('Bonjour!','Vous êtes maintenant connecté !',ICON_USER,false,4000,10,ExempleOfCalledProc); ***

      • Ici, ExempleOfCalledProc doit être définie comme suit, avec le bon paramètre :
type TForm1 = class(TForm) procedure ExempleOfCalledProc(Sender: TObject); [...] procedure TForm1.ExempleOfCalledProc(Sender: TObject); begin ShowMessage('Vous avez cliqué sur le message !!') end;

Conclusion :


Merci à tous ceux qui ont posté des commentaires pour leurs idées et corrections ;)
Pas de bugs connus dans cette version ! Si toutefois vous avez des conseils ou si vous voyez des améliorations à apporter, n'hésitez pas ! :p

Codes Sources

A voir également

Ajouter un commentaire Commentaires
strobinateur Messages postés 11 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 14 avril 2009
10 sept. 2008 à 13:51
bonjour et merci c'est ce que je cherchai, très bien écrit, je met 9 car on peut toujours améliorer bien que sa fait plaisir un code sans 36 options inutile.
ffbbii Messages postés 1 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 19 janvier 2007
19 janv. 2007 à 09:44
Juste pour signaler que si l'on met un StepTime inférieur à 10, la fenetre d'alerte ne prend pas en compte le paramétre WaitBeforeDown.

Par exemple :
AlertMsgBox('Bonjour!','Vous êtes maintenant connecté!',ICON_USER,false,4000,1,ExempleOfCalledProc);
Ne respecte pas les 4 secondes d'affichage mais elle reste bien au delà de ce temps d'attente.

Je trouve ta source superbe et j'ai mis du temps à la trouver via le net. Merci pour ta contribution aux Delphistes ;)
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Modérateur Dernière intervention 18 novembre 2010 14
23 nov. 2006 à 18:46
10/10
je le cherchais, je l'ai trouvé :p
merci nico !
lordrem Messages postés 1 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 20 août 2006
20 août 2006 à 07:03
Belle réussite ni69!

Je m'avais développé par le passé une fenêtre d'alerte semblable mais sans animation. J'ai testé ton composant et j'y ajouterais une simple ligne. Elle sert à s'assurer que ta page se réaffiche toujours par dessus toutes les autres applications même si ton application n'a pas le focus. Exemple, si ta fenêtre commence à monter et tu cliques sur une autre application ouverte, elle va disparaître. Tu n'as qu'a ajouter en première ligne de ton timer la ligne suivante :
SetWindowPos(Handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE );

Encore une fois bravo!
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 13
24 févr. 2006 à 22:17
Merci Cirec !
Dès que j'en ai le temps je modifie le code...

@+
Nico
Afficher les 43 commentaires

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.