begin process at 2010 09 06 05:54:41
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > TRAYICON - VOTRE ICONE DANS LA BARRE DES TACHES

TRAYICON - VOTRE ICONE DANS LA BARRE DES TACHES


 Information sur la source

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :API Classé sous :TrayIcon, Systray, composant, icon Niveau :Initié Date de création :19/03/2009 Date de mise à jour :21/03/2009 12:17:24 Vu / téléchargé :3 367 / 459

Auteur : Bacterius

Ecrire un message privé
Commentaire sur cette source (47)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Bonjour !
Vous connaissez sûrement tous le CoolTrayIcon, un bon composant (quoique un peu lourdingue) pour installer facilement une icône dans la barre des tâches, plus précisément dans la zone de notification (près de l'horloge). Eh bien ce composant permet d'en faire autant, et voici ses fonctionnalités :

- Afficher une icône dans la barre des tâches, avec la possibilité de modifier en temps réel le "hint" de l'icône, l'icône elle-même, ainsi que le popup-menu attaché à cette icône.

- Afficher un ballon d'information (comme la bulle de Windows qui vous indique que vous êtes connecté à internet), en précisant seulement un titre, un texte, un type d'icône et un temps d'affichage en secondes.

- Gère de nombreux événements relatifs à l'icône (clic sur l'icône, affichage, suppression, mouvement de la souris au-dessus de l'icône, ...), et au ballon d'information (clic sur le ballon, fermeture du ballon, affichage du ballon, ...).

- Est capable de se remettre dans la zone de notification si la barre des tâches s'est fermée inopinément.

- Petit bonus en prime : propose quelques icônes prédéfinies (celles qu'on trouve dans User32.dll, vous irez y faire un tour ...).

Tout semble stable pour le moment, j'ai inclus une application d'exemple très complète qui utilise toutes les fonctionnalités de mon composant, y compris les évènements et le popup-menu, en passant par le ballon d'aide. Cependant je n'ai pas commenté l'application d'exemple (rien de très compliqué à comprendre). En revanche j'ai commenté le composant, mais je l'ai fait en anglais (enfin de l'anglais basique pour ne pas non plus pénaliser ceux qui ne sont pas très bons en anglais).

Enfin bref, ce composant est pas trop mal, va se loger dans la palette "Système", et est assez ergonomique. Je vous laisse l'exploiter.

|--- Instructions d'installation ---|

1. Télécharger.
2. Ouvrir le répertoire de téléchargement.
3. Ouvrir le dossier Component dans ce répertoire.
4. Ouvrir le paquet TrayIconPkg.
5. Cliquer sur "Installer" une fois dans Delphi.
6. Retourner dans le dossier Component.
7. Revenir en arrière.
8. Lancer TrayIconExample.dpr.
9. Compiler.
10. Et voilà !

|-----------------------------------|

Bon ok, le composant est moins complet que CoolTrayIcon, mais c'est déjà ça (et il est pas trop dur à utiliser !).


 Conclusion

Tous commentaires, remarques, critiques, conseils, ici.

Codé sous Delphi 6 Personal Edition.

Cordialement, Bacterius !

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   Component
    • TRAYICON.DCRTélécharger ce fichier [Réservé aux membres club]472 octets
    • TrayIcon.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier19 372 octets
    • TrayIconPkg.dpkTélécharger ce fichier [Réservé aux membres club]614 octets
    • TrayIconPkg.resTélécharger ce fichier [Réservé aux membres club]1 536 octets
  • Cleaner.batTélécharger ce fichier [Réservé aux membres club]Voir ce fichier309 octets
  • Main.dfmTélécharger ce fichier [Réservé aux membres club]10 044 octets
  • Main.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier7 215 octets
  • TrayIconExample.dprTélécharger ce fichier [Réservé aux membres club]Voir ce fichier275 octets
  • TrayIconExample.resTélécharger ce fichier [Réservé aux membres club]1 536 octets
  • windowsxp.RESTélécharger ce fichier [Réservé aux membres club]736 octets

Télécharger le zip


 Historique

20 mars 2009 17:22:40 :
Modifications internes : ajout d'une classe TCustomTrayIcon qui contient toutes les propriétés et le code mais non publiées, et TTrayIcon qui publie ces propriétés. Néanmoins, je n'ai pas réussi à faire en sorte de faire la même chose avec BalloonHint ... J'ai également mis un système de gestion des handles (le composant prend le handle de la fiche si il est l'enfant d'une fiche, ou bien il se crée son propre handle). C'est tout pour le moment.
20 mars 2009 17:39:34 :
Rectification de la méthode surchargée BalloonHint (j'ai fait du mieux que j'ai pu ...).
20 mars 2009 20:22:21 :
Annulation de la derniere MAJ
21 mars 2009 12:12:36 :
Gestion de la remise de l'icône en cas de problème explorer.exe
21 mars 2009 12:17:24 :
// Mini-bug.

 Sources du même auteur

Source avec Zip Source avec une capture FACTORISATION ET TEST DE PRIMALITÉ 32 BITS ULTRA OPTIMISÉ
Source avec Zip LECTEUR DE FICHIER MULTIMÉDIA RIFF
Source avec Zip Source avec une capture LYNX : CHIFFREMENT À BLOC/FLUX, EXEMPLE INCLUS
Source avec Zip Source avec une capture JEU DE CULTURE OPTIMISÉ
Source avec Zip Source avec une capture UNITÉ DE SUPPORT VISTA

 Sources de la même categorie

Source avec Zip DÉCOUPER UNE FENÊTRE par gta126
Source avec Zip TRANSCRIRE UN FICHIER OPEN FINANCIAL EXCHANGE (OFX) EN FICHI... par jeffem
Source avec Zip Source avec une capture MSXML 4.0 VALIDATION XML / XSD par redtux
Source avec Zip FBRENOMMEADOBJET par fbalien
Source avec Zip NEXTGENS -> UNITÉS DE TYPES ÉVOLUÉS NOUVELLE GÉNÉRATION (DE... par f0xi

 Sources en rapport avec celle ci

Source avec Zip TGPS COMPOSANT DE GESTION DES TRAMES NMEA 0185 par ILP
Source avec Zip COMPOSANT TCYCOMMUNICATE - COMMUNIQUER AVEC VOS AUTRES APPLI... par MAURICIO
Source avec Zip Source avec une capture MUSIC PRO COMPOSANTS par Francky23012301
Source avec Zip Source avec une capture CINDY PACK V3.23 par MAURICIO
Source avec Zip Source avec une capture SURVEILLANCE DU CONTENU D'UN DOSSIER par botelec

Commentaires et avis

Commentaire de blueperfect le 20/03/2009 04:51:18

Bonne idée...

Je te conseille (en complément de ce nouveau moyen d'afficher une infobulle), de consulter http://www.delphiarea.com/products/delphi-components/tooltips/

@+

Commentaire de blueperfect le 20/03/2009 05:42:32

Je viens de tester (et d'intégrer ton composant) :

* pas de bug recensé
* pourquoi OnMove et pas OnMouseMove ?

j'ai créé une sous-classe TBasicTrayIcon, et TrayIcon descendant de celle-ci...

La différence :

TBasiTrayIcon ne publie aucune de ses propriétés, et TrayIton ne fait que les publier...

C'est un tour de passe-passe qui vient de chez Borland (et du C++), qui permets d'avoir en bout de chaine une classe "utilisable", mais en avant-dernier maillon une classe "dérivable", et dont les propriétés sont "publiables", et non "publiées"...

@+

Commentaire de blueperfect le 20/03/2009 05:43:53

>> Lire "TBasicTrayIcon"...

Tu as 18/20 à ce devoir...

@+

Commentaire de cantador le 20/03/2009 11:20:10

Salut Bacterius,
WM_TRAYICON = WM_USER + 77;
77 ?

Commentaire de cirec le 20/03/2009 12:23:29 administrateur CS

@BluePerfect:
il y a des règles que l'on appel convention pour l'écriture de code. ceci a été fait dans un but d'harmoniser les codes. Donc si déjà, autant les utiliser et surtout éviter de rajouter ses règles personnelles(excès de tabulations, Abus d'underscores "_" etc. etc.)
voir le tuto de f0xi:
http://www.delphifr.com/tutoriaux/CONVENTIONS-ECRITURE-IDENTIFIANTS-VARIABLES-METHODES-DELPHI_413.aspx
et un plus complet ici:
http://www.econos.de/delphi/cs.html

donc tout ça pour dire que les classes devrait être:
TCustomTrayIcon (qui est le composant développé mais sans propriétés publiées)
et TTrayIcon qui hérite de TCustomTrayIcon et qui ne fait que publier les propriétés.
Tous les composants de la VCL on une classe parent "Custom"
@Cantador:
c'est juste une valeur perso ... à partir de WM_USER on peut définir un message personnel.

@Bacterius:
par contre je crois que le comportement n'est pas corecte ... il manque le plus important !!!!

un TrayIcon devrait être relié à une fiche (la principale normalement) mais c'est pas le cas
quand on ferme la fiche principale elle ne doit pas fermer l'application mais juste la cacher par contre elle ne doit pas apparaitre dans la barre des taches.

si l'explorer est redémarré l'icon dans le tray est perdu

c'est un bon début mais c'est loin d'être fini :)

Commentaire de Bacterius le 20/03/2009 17:02:10

@Cantador : le 7 est mon chiffre préféré ^^ C'est juste une touche personnelle de goût lol.

@Blueperfect : evidemment oui on peut faire une TCustomTrayIcon qui contient tout le code mais qui ne publie rien, et comme ça on peut s'en servir comme base pour n'importe quel composant. Mais bon, vu que toutes les propriétés sont normalement indispensables (a part peut-être TIconType ...). Pour le OnMouseMove ce n'était pas voulu, je n'ai pas fait attention :)

@Cirec : Ben dans ce cas dans le OnCreate :

constructor T(Custom)TrayIcon.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
if AOwner is TCustomForm then [utilise le handle de la fiche] else
  [se crée son handle personnel]
...
end;

Non ?

Je vais prendre un petit goûter et j'arrive améliorer mon composant.


Cordialement, Bacterius !

Commentaire de blueperfect le 20/03/2009 17:08:10

@CIREC
*Custom contre Basic : le débat est ouvert (je n'aime pas les 'm' !)
*underscores : cela vient d'une notation assembleur/C, où tout ce qui est de "bas niveau" se veut commencer par un "underscore"... Quand nous en serons à utiliser des composants entiers, alors je n'utiliserais plus les "underscores"
*TrayIon relié à une fiche ? non, du tout... La tray icon est le reflet de l'icone prinipale d'un programme (éventuellement d'un thread)...Elle devrait proposer dans son menu un accès au menu principal de l'application, et un accès rapide aux fiches ouvertes !
*explorer redémarré : je ne souhaite à personne de faire tourner une appli qui te force à le redémarrer !

Conclusion : pas très constructif !

@Bacterius
Par contre, tu devrais rajouter la propriété Title:AnsiString, aisnsi qu'une propriété ShowBallon:Boolean, ce qui permets de tester la trayicon directeemnt depuis le Designer de Delphi...

DH

Commentaire de Bacterius le 20/03/2009 17:10:58

@Blueperfect : Que devrait représenter le Title ? Sinon pour l'icône depuis Delphi je ne suis pas trop pour, mais on verra plus tard.

Cordialement, Bacterius !

Commentaire de blueperfect le 20/03/2009 17:14:36

@Bactérius :

    procedure BalloonHint(                             // Shows a balloon hint :
              Title: String;                           // The title of the balloon hint
              Hint: String;                            // The text of the balloon hint
              Timeout: Byte;                           // The timeout of the balloon, in seconds
              Icon: TBalloonIcon);                     // The icon type

Commentaire de Bacterius le 20/03/2009 17:17:32

Rrrah s'il vous plaît pas d'accent sur Bacterius !
Sinon je ne vois pas trop l'intérêt d'une propriété Title. Après tout, quand l'utilisateur a besoin d'un ballon il appelle cette méthode et passe un titre de ballon ... l'utilisation d'une propriété Title ne serait que lourde et pas rentable.

Cordialement, Bacterius !

Commentaire de blueperfect le 20/03/2009 17:19:10

>> ...après tout, quand l'utilisateur a besoin...
l'utilisateur ou le programmeur ?

lol

DH

Commentaire de Bacterius le 20/03/2009 17:25:25

L'utilisateur du composant. Bon alors ... imaginons cette situation :

L'utilisateur du composant voudrait faire apparaître un ballon.

[Avec la propriété Title] :

1. L'utilisateur du composant définit la propriété Title.
2. L'utilisateur appelle BalloonHint.

[Sans propriété Title] :

1. L'utilisateur du composant appelle BalloonHint en définissant Title à ce moment-là.

Ok, avec Title le gars gagne un paramètre dans BalloonHint. Mais sinon ?

Cordialement, Bacterius !

Commentaire de blueperfect le 20/03/2009 17:29:49

Non, ce ne sont aucun de ces deux cas !

C'est celui là :

Je suis en conception d'application, et je dépose ton compo... Je veux rapidement avoir, dans le designer, sans compilation, le visuel de tout changement...

Commentaire de Bacterius le 20/03/2009 17:38:32

Lol donc en fait tu voudrais afficher un ballon en design-time.
Lol.

Cordialement, Bacterius !

Commentaire de Bacterius le 20/03/2009 17:40:19

En tout cas la version stable (avec TCustomTrayIcon) est là. Maintenant on peut commencer à extrapoler vers des fonctionnalités plus interessantes.

Cordialement, Bacterius !

Commentaire de blueperfect le 20/03/2009 17:46:03

ça roule...

Commentaire de cantador le 20/03/2009 18:27:50

@Bacterius et cirec:
je connais TrayIcon->> voir PostitForEver
mais 77 m'a intrigué..

Commentaire de cirec le 20/03/2009 18:35:03 administrateur CS

BluePerfect:
il semblerait que tu n'aies plus rien à apprendre ... c'est bien, je suis content pour toi. ^^

Malgré tout je te conseil de jeter un oeil ici:
http://social.msdn.microsoft.com/Search/en-us/?query=TaskbarCreated

Bacterius:
je t'envoie un code tu comprendras mieux et ça te donneras des idées.

Commentaire de blueperfect le 20/03/2009 19:13:34

@CIREC
Si, si, j'apprends chaque jjour que Dieu fait...

Après lecture de http://msdn.microsoft.com/en-us/library/cc144179(VS.85).aspx#tbnotify_Adding_Deleting_Icons :

"Applications commonly put icons in the status area of the taskbar to serve as status indicators...
...The system notifies you of mouse and keyboard events by sending an application-defined callback message ..."

il semblerait que la taskbar soit utilisée par les "Applications", et non les "fenêtres" ou "fiches"... C'est d'ailleurs l'Application qui se doit de traiter les callback ! et non une fenêtre fille ...!

@Bactérius
En fait pour Title :

* tu n'as pas tort : cela allourdit l'écritur de TON composant...
* mais tu as tort : cela est plus agréable pour l'utilisateur du Designer de Delphi...

DH

Commentaire de cirec le 20/03/2009 19:58:50 administrateur CS

tu le fais exprès ou quoi:
je t'envoie un lien pour te prouver qu'explorer peut être amené à redémarrer et toi tu reviens sur le fait que j'ai utiliser fiche à la place d'application !!!
alors oui je l'ai dit ... mais on s'en fout dans la pratique tu as déjà essayé d'afficher une instance de  TApplication !!!
quand tu fais un Callback tu surcharges un TApplication toi  ?
moi je déclare la procédure et l'utilise dans l'unité/objet dans le quel elle est utilisée.
en l'occurrence ici le CallBack est déclaré et traité dans le composant même !!!
pfff!!!

Commentaire de Bacterius le 20/03/2009 20:10:11

@Cirec : j'ai reçu ton lien, j'en ferai bon usage (je vais le lire plus tard ce soir, j'ai déjà jeté un coup d'oeil).

Oui le callback est géré par le composant même.
Mais j'ai un problème. Si l'on utilise le handle de la fiche, ça ne marche plus, puisque les messages ne sont plus envoyés au composant, et donc par conséquent plus rien n'est traité. Non ?

Cordialement, Bacterius !

Commentaire de blueperfect le 20/03/2009 20:10:45

>>tu le fais exprès ou quoi:
heuuu

>>>Pffff
Tu es administrateur, mais tu te calmes quand même, et tu restes respectueux, s'il te plaît...

>>>je t'envoie un lien pour te prouver qu'explorer peut être amené à redémarrer
C'est ça qui n'est pas normal, de deoir re-démarrer l'explorer...

>>>tu as déjà essayé d'afficher une instance de  TApplication
Handle + Icon + Title --> TrayIcon de l'instance de l'application

>>>Callback tu surcharges un TApplication
En l'occurence, oui.

>>moi je déclare la procédure et l'utilise dans l'unité/objet dans le quel elle est utilisée.
moi, je fais un composant (ou une propriété) avec évènements, et je le pose sur la fiche...

>>>en l'occurrence ici le CallBack est déclaré et traité dans le composant
Il ne devrait y avoir qu'une seul trayicon par application !

Commentaire de blueperfect le 20/03/2009 20:12:17

D'ailleurs, TApplication.OnMessage est fait pour cela !

Commentaire de Bacterius le 20/03/2009 20:12:53

En plus je vois le paradoxe avec le redémarrage d'Explorer :

Si Explorer redémarre, il envoie à toutes les applications un message, TaskBarCreated. Ces applications envoient ensuite ce message à leur fiche principale. Or, si le composant gère son propre handle, le message n'arrivera jamais au composant.
Mais la réponse doit se trouver dans le composant que tu m'as passé :)

Cordialement, Bacterius !

Commentaire de Bacterius le 20/03/2009 20:14:09

"Il ne devrait y avoir qu'une seul trayicon par application !"

Je ne suis pas d'accord - dans certaines situations on peut être amené à avoir plusieurs icônes (même si c'est inhabituel) pour une même application.

Cordialement, Bacterius !

Commentaire de Bacterius le 20/03/2009 20:15:10

Par exemple (dans la continuité de mon message précédent), AVG 8 a une icône qui reste tout le temps dans la zone de notification, et quand un scan démarre, il y a une icône légèrement différente qui s'ajoute, qui indique qu'un scan est en cours. Ca fait 2 icônes.

Cordialement, Bacterius !

Commentaire de blueperfect le 20/03/2009 20:17:45

---> Lorsque je dis Application, cela s'applique également aux threads de l'application...

Commentaire de Bacterius le 20/03/2009 20:19:25

Et aussi :

"C'est ça qui n'est pas normal, de deoir re-démarrer l'explorer..."

Je ne suis pas d'accord non plus. Parfois, WindowsXP, à la suite de certaines opérations, doit redémarrer l'explorer. Ca peut arriver. Il faut savoir être souple, si l'utilisateur aime bien cliquer sur "Terminer le processus" quand la liste est sur "explorer.exe", l'application doit savoir réagir à ça.

Cordialement, Bacterius !

Commentaire de Bacterius le 20/03/2009 20:24:38

Bon j'ai annulé la dernière MAJ, qui ne fonctionne pas. J'ai une idée pour le redémarrage d'explorer mais il faut que je me renseigne.
Je ne vois pas trop comment faire autrement que de surcharger Application.OnMessage, vu que le système, quand explorer redémarre, envoie le message juste aux fenêtres parentes, soit Application.
Je n'ai jamais aimé travailler avec Application.OnMessage. Plusieurs dizaines de milliers de messages passent par cet événement toutes les secondes, il ne faut pas se louper ...

Cordialement, Bacterius !

Commentaire de blueperfect le 20/03/2009 20:33:12

ça peut t'aider :

procedure TD3User.AfterConstruction;

begin
     inherited AfterConstruction;

     if not(csDesigning in self.ComponentState)
        then self._handle := Classes.AllocateHWnd(self.DoWindowProcedure);

end;

procedure TD3User.DoWindowProcedure(var _message:TMessage);

const
  // APM messages
  PBT_APMQUERYSUSPEND       = $0000;
  PBT_APMQUERYSTANDBY       = $0001;
  PBT_APMQUERYSUSPENDFAILED = $0002;
  PBT_APMQUERYSTANDBYFAILED = $0003;
  PBT_APMSUSPEND            = $0004;
  PBT_APMSTANDBY            = $0005;
  PBT_APMRESUMECRITICAL     = $0006;
  PBT_APMRESUMESUSPEND      = $0007;
  PBT_APMRESUMESTANDBY      = $0008;
  PBT_APMBATTERYLOW         = $0009;
  PBT_APMPOWERSTATUSCHANGE  = $000A;

var _allow:Boolean;

begin
     inherited; // default message handler

     if _message.Msg = WM_POWERBROADCAST
        then case _message.WParam of

                  PBT_APMQUERYSUSPEND        : begin
                                                    _allow := self.DoQuerySuspend;

                                                    if _allow
                                                       then _message.Result := Integer(True)
                                                       else _message.Result := BROADCAST_QUERY_DENY;
                                               end;

                  PBT_APMQUERYSTANDBY       : begin
                                                   _allow := self.DoQueryStandby;

                                                   if _allow
                                                      then _message.Result := Integer(True)
                                                      else _message.Result := BROADCAST_QUERY_DENY;
                                              end;

                  PBT_APMBATTERYLOW         : self.DoBatteryLow;
                  PBT_APMPOWERSTATUSCHANGE  : self.DoPowerStatusChange;
                  PBT_APMRESUMECRITICAL     : self.DoResumeCritical;
                  PBT_APMRESUMESUSPEND      : self.DoResumeSuspend;
                  PBT_APMRESUMESTANDBY      : self.DoResumeStandby;
                  PBT_APMSUSPEND            : self.DoSuspend;
                  PBT_APMQUERYSUSPENDFAILED : self.DoSuspendFailed;
                  PBT_APMSTANDBY            : self.DoStandby;
                  PBT_APMQUERYSTANDBYFAILED : self.DoStandbyFailed;

             end
        else if _message.Msg = WM_QUERYENDSESSION
                then _message.Result := Integer(self.DoQueryEndSession);
end;


C'est une mini-gestion de l'arrêt/mise en veille/restart...

Tu alloue un handle de fenêtre virtuel (sans visuel), et il intercepte les messages de l'alimentation... bon courage

DH

Commentaire de cirec le 20/03/2009 20:45:21 administrateur CS

pfff >> onomatopée exprimant l'exaspération ...
il n'y a rien d'irrespectueux là dedans.
c'est toi qui prend tout de haut sinon on en serait pas là en ce moment .....
outre le fait que l'utilisateur peut terminer le processus Explorer.exe en général c'est l'OS qui le fait.

je te retourne donc ce conseil ... calme toi

Commentaire de blueperfect le 20/03/2009 20:52:34

>>outre le fait que l'utilisateur peut terminer le processus Explorer.exe
Anormal, et là tu n'as pas de moyen réel de controler...alors j'oublie !

>>en général c'est l'OS qui le fait
Normal, et là il y a une série de messages et de confirmations, voire ci-dessus...là je traite...

>>pfff....calme toi
exaspération : 7 synonymes.  
Synonymes agacement, aggravation, crispation, énervement, exacerbation, irritation, rage.  

je ne te retourne pas l'onomatopée...

Commentaire de cirec le 20/03/2009 21:18:08 administrateur CS

dernière tentative.
si c'est l'utilisateur qui le kill c'est l'OS qui le redémarre donc contrôle total

quand à ta série de messages elle ne sert à rien dans ce cas précis ... ça n'a rien à voir avec la gestion de l'alimentation.

Commentaire de blueperfect le 20/03/2009 21:20:08

Une coupure suite à une alimentation défaillante est la réplique d'un utilisateur qui interromps un process...

Mais restons en là sur ce sujet, je souhaitais publier un composant, et il ne voit pas le jour...

Commentaire de Bacterius le 20/03/2009 21:26:42

Cirec, ça progresse pour l'interception du message TaskbarCreated quand la barre des tâches se recrée ;)

Cordialement, Bacterius !

Commentaire de Bacterius le 21/03/2009 11:56:52

Cirec, j'ai regardé le composant que tu m'as envoyé. Ok, mais il ne gère pas le redémarrage du taskbar - aucun message WM(ou RM)_TASKBARCREATED ne passe par la procédure de fenêtre du composant, car le message est seulement envoyé aux fenêtres parentes dans le système. Il faudrait alors trouver un moyen pour rediriger les messages de la fenêtre principale vers le composant ...

Cordialement, Bacterius !

Commentaire de Bacterius le 21/03/2009 12:14:55

Bon, finalement il le gère, et depuis le début j'étais dans le faux (je faisais ShowIcon en recevant le message, mais ShowIcon ne l'affichait pas puisque FActive était égal à True - normal).
Maintenant, l'icône se remet automatiquement dans la barre des tâches si explorer.exe a un problème et doit fermer.
Néanmoins, j'ai un problème : "Erreur système. Code : 1400. Handle de fenêtre non valide" dans toutes les fenêtres Delphi. Mais ça ne doit pas venir de mon composant.

Cordialement, Bacterius !

Commentaire de cantador le 21/03/2009 13:02:32 7/10

@Bacterius:

7/10 (lol)...

Commentaire de Bacterius le 21/03/2009 16:51:44

@Cantador : ouais ! Mais tu oublies un truc : ça fait 14/20. Et le 1 et le 4 sont mes deux chiffres que je déteste ... ^^

Cordialement, Bacterius !

Commentaire de cantador le 22/03/2009 18:13:42

bon alors 28/40..

Commentaire de Bacterius le 22/03/2009 18:25:03

Je n'accepterai que 1792/2560 comme note !
Sinon, je pense qu'on peut difficilement ajouter quelque chose de plus à ce composant ...

Cordialement, Bacterius !

Commentaire de cantador le 22/03/2009 22:16:20

Dommage qu'on ne voit plus le ballon d'information..
C'était le charme du compo..
rien ajouter, ouf.. on peut toujours tu pourrais mettre des alertes styles MSN envoyer des emails etc..
mais dès que ça devient l'usine à gaz..
essaie de remettre les ballons et stabilise le.

Commentaire de Bacterius le 23/03/2009 18:41:13

Le ballon ne fonctionne plus ? Je n'ai pas remarqué ! Je vais vérifier ça tout de suite.
Sinon, oui quand il y a trop de choses ça devient pénible (regarde CoolTrayIcon, je ne l'utilise plus à cause de ça ... trop d'options inutiles !).
Sinon ... envoyer des e-mails n'est pas le rôle d'une icône :} enfin je pense - celui qui veut faire ça n'a qu'à envoyer la procédure SendEmail (par exemple) pour envoyer son e-mail quand il en a besoin.
Je vérifie le ballon ...

Cordialement, Bacterius !

Commentaire de Bacterius le 23/03/2009 18:47:00

Le ballon fonctionne toujours Cantador, tu n'as pas fait une fausse manip' ?
Moi je fais ça (avec la version la plus récente du composant, c'est-à-dire celle qui est en ligne) :

// Ajout d'un composant TrayIcon, avec Active := True, IconType := itDefault, Hint := 'My TrayIcon';
// Ajout d'un bouton :

procedure TForm1.Button1Click(Sender: TObject);
begin
TrayIcon1.BalloonHint('Salut !', 'Hahaha', 10, biInfo);
end;

Et mon ballon s'affiche sans problème.
Evidemment si il n'y a pas d'icône, aucun ballon ne s'affichera (j'ai même mis un contrôle d'erreur dans la procédure BalloonHint).

Cordialement, Bacterius !

Commentaire de cantador le 23/03/2009 18:56:55

yès ça marche avec la dernière mouture..
Qu'est ce que je disais ah oui, le ballon d'information peut servir d'alerte et donc bien sûr peut déboucher sur tout un tas d'action..
il y aussi le message qui monte et qui descend derrière la barre de taches..etc.

Commentaire de Bacterius le 23/03/2009 20:10:30

Effectivement, oui ... je prépare un nouveau pack de composants (avec certains composants déjà vus sur le site), bref un pot pourri de tous mes meilleurs composants. Il ne sera pas prêt avant longtemps ... j'ai du boulot.

Cordialement, Bacterius !

Commentaire de blueperfect le 23/03/2009 23:00:49

Merci, faudra que je pense aux lunettes...

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

infobulle dans icone systray [ par mike255 ] Bonjour,Voila, je voudrais savoir comment mettre en place une bulle d'infos comme celle qui apparait pres de l'icone de l'horloge sur xp lors de la co Composant : changer icon [ par Bruto ] J'ai créé un composant ( TLP_Systray ) et je voudrais lui associer une image spécifique.J'ai créé cette image avec l'éditeur d'image de Delphi.Je l'ai EXE dans SYSTRAY [ par g0belin ] comment faire pour que mon programme aille dans le systray et ne soit plus detectable dans la liste des taches. Utilisation du composant TCanvas3D sous C++ Builder [ par naikon ] Bonjour,Je ne programme pas sous C++ Builder depuis tres longtemps et je tombe sur un probleme idiot.(et comme ca fait une heure que je me prends la t Protocol RTP (Real Time Protocol) [ par jockos ] Bonjour,Existe t-il un composant Delhi qui permet d'utiliser ce protocole (niveau applicatif, au même titre que HTTP ou FTP) ?Ce protocol sert à faire Form dans un composant [ par Bruto ] Je voudrais inclure une form dans un de mes composant.Pour cela j'ai créer un composant avec l'extension '.pas' et tout ce qui est register, ...Je fab Composant erreur canvas [ par Bruto ] Voila j'essaye de créer un composant & je récupère une erreur que je n'arrive pas à élucider.Il me dit 'Identificateur non déclaré Canvas' pour la lig Tous vos raccourcis dans le systray, loger dans une icone. [ par Don0Choa ] Tous vos raccourcis dans le systray, loger dans une icone.Lunchables qu'en pensez vous?Dites moi franchment ce que vous en pensez , toutes remques son Aide pour composant MySQL de ce site ? [ par Fredelphi ] Bonjour,Je suis à la recherche d'une aide assez complète sur le composant MySQL trouvé sur ce site, car l'aide jointe n'est pas finie .........Qui peu WEBBROWSER [ par sissokomad ] comment rendre un composant webbrowser transparent(donc toujour accessible par clic) si c'est impossible quelle autre composant me permettrait de fair


Nos sponsors


Sondage...

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,842 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales