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

Soyez le premier à donner votre avis sur cette source.

Vue 26 182 fois - Téléchargée 1 877 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

Messages postés
11
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
14 avril 2009

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.
Messages postés
1
Date d'inscription
dimanche 19 novembre 2000
Statut
Membre
Dernière intervention
19 janvier 2007

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 ;)
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
13
10/10
je le cherchais, je l'ai trouvé :p
merci nico !
Messages postés
1
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
20 août 2006

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!
Messages postés
1418
Date d'inscription
samedi 12 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2010
10
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.