CRÉEZ VOTRE PREMIÈRE TRAY ICON . CODE TRÈS SIMPLE ET ACCESSIBLE...
magic_Nono
Messages postés1878Date d'inscriptionjeudi 16 octobre 2003StatutMembreDernière intervention16 mars 2011
-
20 mars 2006 à 10:37
cs_kalvados
Messages postés14Date d'inscriptionmardi 15 février 2005StatutMembreDernière intervention 2 décembre 2008
-
10 juin 2006 à 01:51
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_kalvados
Messages postés14Date d'inscriptionmardi 15 février 2005StatutMembreDernière intervention 2 décembre 2008 10 juin 2006 à 01:51
Ha oué ben moi je suis bien content de trouver du code Borland, plutôt que de devoir passer un temps fou à décrypter du WC++ surtout que quand je vais chercher des sources sur le net c'est pour comprendre un truc que j'ai pas pigé... alors si en plus il faut deviner ce qui fait partie du code pur et ce qui est spécifique au compilo, bonjour la galère !
Donc tant que je coderais sur Borland, dsl mais je releaserai du Borland, et il y aura toujours des heureux... (y'a qu'à lire les commentaires précédant les tiens...)
PS : Le "W" à la place du V, c'est pas un hasard ;)
wxccxw
Messages postés755Date d'inscriptionsamedi 15 mai 2004StatutMembreDernière intervention30 janvier 2011 9 juin 2006 à 21:37
je ne vois pas l'interet de release du borland car il n'est pas accepter par tout les compilateur, contrairement a VC++ ou encore DevC++
@+
cs_neria
Messages postés319Date d'inscriptionvendredi 21 février 2003StatutMembreDernière intervention16 février 2009 14 mai 2006 à 11:01
Merci ! C'est exactement ce que je cherchais !!
cs_budo
Messages postés5Date d'inscriptionmercredi 3 mars 2004StatutMembreDernière intervention 7 juillet 2015 27 mars 2006 à 20:58
->olbal
bon je te remerci d'abord pour avoir repris ce que j'ai dit
bref un vrais regale avec la lib wxwidgets
de plus c'est ecrit pour ** bcc ** et vc+= ainsi que devc++
je me suis mis a VC2005 express pour son enviroment ainsi que son debugeur puis je recompile le tous avec devc++ pour voir la portabilitée
@plus
cs_kalvados
Messages postés14Date d'inscriptionmardi 15 février 2005StatutMembreDernière intervention 2 décembre 2008 27 mars 2006 à 17:29
Oui, bien sur j'ai vérifié le prototype ^^, et j'ai oublié de signaler que j'ai aussi essayé avec le TApplicationEvents et sa fonction OnMessage...
Décidemment j'ai dû faire une bourde quelquepart mais j'ai pas trouvé pour l'instant.
Dans l'immédiat j'ai une lettre de motivation à écrire, ça va me prendre un moment, mais après je me remets sur builder et si je trouve toujours pas je te donnerais le code :)
olbal
Messages postés20Date d'inscriptionvendredi 16 mai 2003StatutMembreDernière intervention29 septembre 2006 27 mars 2006 à 16:40
-> kalvados
Perso, j'ai toujours employé les 2 premières méthodes qui m'ont jamais posé de problème.
Si tu fait un squelette de fonction vide ça marche ou pas? Si ça marche c'est le traitement du message qui est à revoir, si ça marche pas, ça doit être le prototype de AppMessage qui doit pas être celui attendu. (mais bon je suppose que tu as déjà vérifier!)
void __fastcall TForm1::FormCreate(TObject *Sender)
Autrement, j'ai jamais eu de problème avec la solution 2, et il faut 2s pour la mettre en oeuvre:
Tu poses sur la fiche de ta fenêtre, un objet ApplicationEvents (Onglet supplement)
Tu affiche le concepteur d'objet pour ce nouvel objet posé
Tu double clic sur OnMessage de l'onglet Evénements pour te creer la fonction et tu copies le code de traitement de ton message.
Si ça marche toujours pas, tu peux publier le code provisoire pour que je le regarde
magic_Nono
Messages postés1878Date d'inscriptionjeudi 16 octobre 2003StatutMembreDernière intervention16 mars 2011 27 mars 2006 à 16:10
Olbal> j'utilise dans le contexte des études VS et continue à l'utiliser dans le monde du travail
après, tout dépend des besoins...
et sinon,
je suis tout comme la majorité ici pour un 0 error 0 warning (d'ou la non utilisationdes STL avec VS6)
et actuellement, nous étudions la possibilité d'utilisation d'une librairie graphique portable (wxWidget)
mais toujours en utilisant VS8 (on a les licences & c'est un bon produit quoi qu'il en soit)
@ te relire
++
B
cs_kalvados
Messages postés14Date d'inscriptionmardi 15 février 2005StatutMembreDernière intervention 2 décembre 2008 27 mars 2006 à 14:11
Tiens Olbal, puisque tu es dans le coin...
Avec la troisième solution que tu m'as proposée, j'ai l'impression de me rapprocher du but : Après kill et reboot de explorer, j'ai un message d'erreur 1400, Handle de fenetre invalide... et bien sur mon icône ne revient pas mais là je sais pas où ça coince...
Bien entendu, dans mon code j'ai remplacé "const WM_FILEREADY WM_USER + 2000;" par "const WM_TASKBAR_CREATED RegisterWindowMessage("TaskbarCreated")"
Mais j'ai l'impression que ça plante avant même l'entrée dans la fonction de traitement du message, et je sais aussi que cette même fonction est bien appelée par Application->OnMessage puisque j'ai mis un MessageBox dans la fonction et qu'en une seconde mon écran était couvert de MessageBox :P
J'ai fait d'autres essais mais rien ne marche jusqu'à présent, pourtant mon code ne me semble pas différent de tous ceux que j'ai pu trouver sur le net.
Si tu as une idée, elle sera la bienvenue :)
olbal
Messages postés20Date d'inscriptionvendredi 16 mai 2003StatutMembreDernière intervention29 septembre 2006 27 mars 2006 à 13:08
->Budo
Je connais pas l'outil que tu cite mais pour un developpement multi plateforme le suis d'accord avec toi.
A propos des Warning, je suis doublement d'accord.
Pour ce qui est de la compacité, faut voir si c'est neccessaire et dans quelle proportion cela va jouer.
Maintenant effectivement, les compilateurs C++ doivent se valoir plus ou moins. Par contre je pense qu'il faut bien choisir son environnement en fonction du domaine dans lequel on travaille. Par ex, les utilisateurs de mes logiciels imposent Windows, donc je vais choisir des outils parmis les plus productifs pour ce SE. Mais il faut aussi tenir compte du contexte d'utilisation. Par ex pour une appli devant tourner sur un système embarqué avec peu de mémoire sous windows, faut certainement pas utiliser C++ Builder et la VCL. VC++ et les MFC bien utilisés doneront, certes avec bien plus d'effort, (mais le contexte l'oblige) un bien meilleur resultat du point de vue occupation mémoire et temps de réponse avec un processeur lent.
J'ai écrit que C++Builder était certainement plus productif dans bien des cas que VC++, pour relever la cote de ce bon environnement sur ce site car j'ai trouvé beaucoup de critiques négatives à son propos faite par des utilisateurs de VC++ qu n'en connaisait visiblement que le nom.
cs_budo
Messages postés5Date d'inscriptionmercredi 3 mars 2004StatutMembreDernière intervention 7 juillet 2015 27 mars 2006 à 08:58
utiliser C++ BUILDER OU DEVC++ OU VC+++ peut importe mais utiliser une interface avec WXFORMBUILDER qui genere du code tres simple, wxwidgets biblihotèque qui fonctionne sur toutes les plateformes et tres épurée. L'importance du compilateur est qu'il doit pas laisser de probleme en suspend (warning ect...) et rester compact.
donc le plus important est que le source doit fonctionner sous toutes les plateformes sans retouche.
@bientôt de te lire.
olbal
Messages postés20Date d'inscriptionvendredi 16 mai 2003StatutMembreDernière intervention29 septembre 2006 23 mars 2006 à 18:27
->Magic_Nono
Les 3 méthodes que j'ai décrites sont des méthodes que j'ai utilisé en c++ builder.
Les MFC, je l'ai au utilisées pendant un peu plus d'un an et je n'ai eu aucun regret à les laisser tomber car le problème c'est que VC++ n'a rien de "visual" donc on perd un temps fou à creer à chaque fois des fonctions qui gère l'interface utilisateur si on veut faire une interface au look moderne. Sous Builder tu mixes comme tu veux les avantages de la conception "visuelle" et la liberté/rapidité du C/C++. Quand tu es étudiant, VC++ est idéal pour apprendre la prog sous windows puisqu'il faut écrire beaucoup donc étudier plein de fonctionnalité de Windows, par contre quand tu dois être rentable pour ton patron, il faut chercher à optimiser le temps d'écriture!
magic_Nono
Messages postés1878Date d'inscriptionjeudi 16 octobre 2003StatutMembreDernière intervention16 mars 2011 23 mars 2006 à 17:16
la 3e méthode est en effet en utilisant les mfc...
cs_kalvados
Messages postés14Date d'inscriptionmardi 15 février 2005StatutMembreDernière intervention 2 décembre 2008 22 mars 2006 à 19:19
Haaa là je crois que je commence à comprendre... enfin la 3e méthode en tout cas... je vais faire avec celle-là. Pour le reste je m'y pencherais une autre fois.
Quand au "Sleep", je sais effectivement que ça stoppe tout le process donc je ne l'utilise généralement pas : là j'ai fait un truc vite fait dont le seul but était de tester la création et l'utilisation du systray...
Par contre je vais noter ta méthode (assez ingénieux)
Merci pour tout :)
olbal
Messages postés20Date d'inscriptionvendredi 16 mai 2003StatutMembreDernière intervention29 septembre 2006 22 mars 2006 à 14:12
Pour intercepter un message dans le no est connu qu'à l'éxécution, il faut surcharger la fonction virtuelle WndProc de la fenêtre.
Si noMessTaskbar_created contient le no du message désiré:
{
if (Message.Msg==noMessTaskbar)
{
traitement
}
else
TForm::WndProc(Message);
}
Cela marchera si le message est considéré par la VCL comme étant un message fenêtre. Si la VCL que c'est un message application alors tu peux l'intercepter tout de même dans ta fenêtre en posant un objet TApplicationEvents:
Ou tu change l'adresse du gestionnaire OnMessage de l'objet Application:
Exemple de l'aide:
const WM_FILEREADY = WM_USER + 2000;
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Application->OnMessage = AppMessage;
}
void __fastcall TForm1::AppMessage(tagMSG &Msg, bool &Handled)
{
if (Msg.message == WM_FILEREADY)
{
Memo1->Lines->LoadFromFile(AnsiString((char *)Msg.lParam));
Handled = true;
}
/* pour tous les autres messages, Handled conserve la valeur False pour que les autres gestionnaires de messages puissent répondre */
}
A propos de
Form1->Hide();
Sleep(1000);
Form1->Show();
Quand tu veux marquer une pause pour voir ce qui se passe, Sleep ne convient pas forcément car pendant ce temps la l'application est complétement bloquée, et donc elle ne répond pas a des messages externes.
Je préfère utiliser une autre méthode. Par exemple
DWORD AncTickCount = GetTickCount();
while (GetTickCount()-AncTickCount<1000u)
Application->ProcessMessages();
cs_kalvados
Messages postés14Date d'inscriptionmardi 15 février 2005StatutMembreDernière intervention 2 décembre 2008 22 mars 2006 à 12:45
Désolé... d'une part je découvre tout juste les message_map et l'interception des message windows, et d'autre part ça marche pour le callback_message donc j'ai pensé qu'il suffisait de faire pareil pour taskbar_created...
Tant pis, me reste plus qu'à retourner fouiller le net pour trouver le fonctionnement de maudit truc...
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 22 mars 2006 à 12:38
Je te l'ai déjà dit deux fois ....
la valeur du message n'est pas connue à le compilation !
#define AM_TASKBAR_CREATED WM_APP + 409
c'est faux...
cs_kalvados
Messages postés14Date d'inscriptionmardi 15 février 2005StatutMembreDernière intervention 2 décembre 2008 22 mars 2006 à 12:26
et ça dans mon .cpp
//------------------------------------
void __fastcall TForm1::TaskbarCreated ( TMessage &message )
{
Shell_NotifyIcon(NIM_ADD,&NI_Data);
}
//------------------------------------
Ca compile, ok, mais... j'ai testé en killant et recréant explorer dans le gestionnaire de tâches et l'icône est pas revenue, donc ça doit pas être bon.
Qu'est-ce que t'en penses, est-ce que tu vois ce qui ne vas pas ?
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 21 mars 2006 à 17:56
j'ai juste copier-coller ^^
ca n'ira pas, avec ce message... les macros ne vont pas aimer : la valeur du message n'est connue qu'a l'execution, et pas a la compilation
cs_kalvados
Messages postés14Date d'inscriptionmardi 15 février 2005StatutMembreDernière intervention 2 décembre 2008 21 mars 2006 à 17:54
Tu veux dire : VCL_MESSAGE_HANDLER( TaskbarCreated, TMessage, OnTaskbarCreated); plutot non ??
Parce que si j'ai bien compris le AM_CALLBACK_MESSAGE est dédié à recevoir les interactions de la souris sur l'icône...
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 21 mars 2006 à 17:44
avec ce message là... seul pbm, on n'a la valeur du message qu'a l'execution...
n0ne
Messages postés24Date d'inscriptionsamedi 18 février 2006StatutMembreDernière intervention23 mars 2006 21 mars 2006 à 17:39
Pas mal, pas mal :). Code propre, simple, efficace. Que demander de plus.
cs_kalvados
Messages postés14Date d'inscriptionmardi 15 février 2005StatutMembreDernière intervention 2 décembre 2008 21 mars 2006 à 17:35
Ravi que ça vous aide :D
@ Renfield : Bon ben finalement il semble que je me sois un peu trop avancé...
J'ai bien compris le principe mais je ne sais pas ce qu'est la "boucle de message principale".
Pourrais-tu m'expliquer ça plus en détail ici ou par mail (kalvados30@hotmail.fr) ??
Et dès que j'aurai mis ça en oeuvre je mettrais à jour ma source...
Je te remercie,
il est vrai que pour le builder on a pas des sources à gogo ;)
ça ma pas mal aidé
++
cs_kalvados
Messages postés14Date d'inscriptionmardi 15 février 2005StatutMembreDernière intervention 2 décembre 2008 20 mars 2006 à 16:15
Ok merci, ça devrait aller avec ça :)
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 20 mars 2006 à 16:13
tu fait un RegisterWindowMessage de "TaskbarCreated"
ca va te retourner un numéro de message (disons 'a')
il te suffit ensuite, juste d'attendre le message 'a' dans ta boucle de message principale...
quand il surviens, réinstalle ton icône
cs_kalvados
Messages postés14Date d'inscriptionmardi 15 février 2005StatutMembreDernière intervention 2 décembre 2008 20 mars 2006 à 15:29
Oui en effet c'est pour Borland (je suis sur C++ Builder 6) et c'est pas plus mal parce que sur le net j'ai trouvé beaucoup de sources pour Visual C++ et peu pour Borland...
@Renfield : Oui j'ai vaguement vu ça sur un forum en anglais mais le mec était vraiment pas précis dans ses explications donc peut-être que tu pourrais m'expliquer, ça m'interesse :)
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 20 mars 2006 à 11:53
pensez a recréer vos icones, en cas de crash de Explorer...
(event "TaskbarCreated")
cs_norton
Messages postés215Date d'inscriptionmardi 21 janvier 2003StatutMembreDernière intervention21 août 2011 20 mars 2006 à 11:35
Hello, bravo pour cette source simple d'utilisation elle m'a beaucoup aidé.
Merci
magic_Nono
Messages postés1878Date d'inscriptionjeudi 16 octobre 2003StatutMembreDernière intervention16 mars 2011 20 mars 2006 à 11:31
précision : le code publié ici est pour BORLAND uniquement !!!
TForm....
magic_Nono
Messages postés1878Date d'inscriptionjeudi 16 octobre 2003StatutMembreDernière intervention16 mars 2011 20 mars 2006 à 10:37
:)
amusant, c'est quasi la meme logique que dans ce source...un peu plus complet :
10 juin 2006 à 01:51
Donc tant que je coderais sur Borland, dsl mais je releaserai du Borland, et il y aura toujours des heureux... (y'a qu'à lire les commentaires précédant les tiens...)
PS : Le "W" à la place du V, c'est pas un hasard ;)
9 juin 2006 à 21:37
@+
14 mai 2006 à 11:01
27 mars 2006 à 20:58
bon je te remerci d'abord pour avoir repris ce que j'ai dit
tu trouveras tout http://wxformbuilder.sourceforge.net/index_en.html#downloads
bref un vrais regale avec la lib wxwidgets
de plus c'est ecrit pour ** bcc ** et vc+= ainsi que devc++
je me suis mis a VC2005 express pour son enviroment ainsi que son debugeur puis je recompile le tous avec devc++ pour voir la portabilitée
@plus
27 mars 2006 à 17:29
Décidemment j'ai dû faire une bourde quelquepart mais j'ai pas trouvé pour l'instant.
Dans l'immédiat j'ai une lettre de motivation à écrire, ça va me prendre un moment, mais après je me remets sur builder et si je trouve toujours pas je te donnerais le code :)
27 mars 2006 à 16:40
Perso, j'ai toujours employé les 2 premières méthodes qui m'ont jamais posé de problème.
Si tu fait un squelette de fonction vide ça marche ou pas? Si ça marche c'est le traitement du message qui est à revoir, si ça marche pas, ça doit être le prototype de AppMessage qui doit pas être celui attendu. (mais bon je suppose que tu as déjà vérifier!)
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Application->OnMessage = AppMessage;
}
void __fastcall TForm1::AppMessage(tagMSG &Msg, bool &Handled)
{
//
}
Autrement, j'ai jamais eu de problème avec la solution 2, et il faut 2s pour la mettre en oeuvre:
Tu poses sur la fiche de ta fenêtre, un objet ApplicationEvents (Onglet supplement)
Tu affiche le concepteur d'objet pour ce nouvel objet posé
Tu double clic sur OnMessage de l'onglet Evénements pour te creer la fonction et tu copies le code de traitement de ton message.
Si ça marche toujours pas, tu peux publier le code provisoire pour que je le regarde
27 mars 2006 à 16:10
après, tout dépend des besoins...
et sinon,
je suis tout comme la majorité ici pour un 0 error 0 warning (d'ou la non utilisationdes STL avec VS6)
et actuellement, nous étudions la possibilité d'utilisation d'une librairie graphique portable (wxWidget)
mais toujours en utilisant VS8 (on a les licences & c'est un bon produit quoi qu'il en soit)
@ te relire
++
B
27 mars 2006 à 14:11
Avec la troisième solution que tu m'as proposée, j'ai l'impression de me rapprocher du but : Après kill et reboot de explorer, j'ai un message d'erreur 1400, Handle de fenetre invalide... et bien sur mon icône ne revient pas mais là je sais pas où ça coince...
Bien entendu, dans mon code j'ai remplacé "const WM_FILEREADY WM_USER + 2000;" par "const WM_TASKBAR_CREATED RegisterWindowMessage("TaskbarCreated")"
Mais j'ai l'impression que ça plante avant même l'entrée dans la fonction de traitement du message, et je sais aussi que cette même fonction est bien appelée par Application->OnMessage puisque j'ai mis un MessageBox dans la fonction et qu'en une seconde mon écran était couvert de MessageBox :P
J'ai fait d'autres essais mais rien ne marche jusqu'à présent, pourtant mon code ne me semble pas différent de tous ceux que j'ai pu trouver sur le net.
Si tu as une idée, elle sera la bienvenue :)
27 mars 2006 à 13:08
Je connais pas l'outil que tu cite mais pour un developpement multi plateforme le suis d'accord avec toi.
A propos des Warning, je suis doublement d'accord.
Pour ce qui est de la compacité, faut voir si c'est neccessaire et dans quelle proportion cela va jouer.
Maintenant effectivement, les compilateurs C++ doivent se valoir plus ou moins. Par contre je pense qu'il faut bien choisir son environnement en fonction du domaine dans lequel on travaille. Par ex, les utilisateurs de mes logiciels imposent Windows, donc je vais choisir des outils parmis les plus productifs pour ce SE. Mais il faut aussi tenir compte du contexte d'utilisation. Par ex pour une appli devant tourner sur un système embarqué avec peu de mémoire sous windows, faut certainement pas utiliser C++ Builder et la VCL. VC++ et les MFC bien utilisés doneront, certes avec bien plus d'effort, (mais le contexte l'oblige) un bien meilleur resultat du point de vue occupation mémoire et temps de réponse avec un processeur lent.
J'ai écrit que C++Builder était certainement plus productif dans bien des cas que VC++, pour relever la cote de ce bon environnement sur ce site car j'ai trouvé beaucoup de critiques négatives à son propos faite par des utilisateurs de VC++ qu n'en connaisait visiblement que le nom.
27 mars 2006 à 08:58
donc le plus important est que le source doit fonctionner sous toutes les plateformes sans retouche.
@bientôt de te lire.
23 mars 2006 à 18:27
Les 3 méthodes que j'ai décrites sont des méthodes que j'ai utilisé en c++ builder.
Les MFC, je l'ai au utilisées pendant un peu plus d'un an et je n'ai eu aucun regret à les laisser tomber car le problème c'est que VC++ n'a rien de "visual" donc on perd un temps fou à creer à chaque fois des fonctions qui gère l'interface utilisateur si on veut faire une interface au look moderne. Sous Builder tu mixes comme tu veux les avantages de la conception "visuelle" et la liberté/rapidité du C/C++. Quand tu es étudiant, VC++ est idéal pour apprendre la prog sous windows puisqu'il faut écrire beaucoup donc étudier plein de fonctionnalité de Windows, par contre quand tu dois être rentable pour ton patron, il faut chercher à optimiser le temps d'écriture!
23 mars 2006 à 17:16
22 mars 2006 à 19:19
Quand au "Sleep", je sais effectivement que ça stoppe tout le process donc je ne l'utilise généralement pas : là j'ai fait un truc vite fait dont le seul but était de tester la création et l'utilisation du systray...
Par contre je vais noter ta méthode (assez ingénieux)
Merci pour tout :)
22 mars 2006 à 14:12
Si noMessTaskbar_created contient le no du message désiré:
void __fastcall TForm1::WndProc(TMessage& Message)
{
if (Message.Msg==noMessTaskbar)
{
traitement
}
else
TForm::WndProc(Message);
}
Cela marchera si le message est considéré par la VCL comme étant un message fenêtre. Si la VCL que c'est un message application alors tu peux l'intercepter tout de même dans ta fenêtre en posant un objet TApplicationEvents:
void __fastcall TFenApp::AppEventsMessage(tagMSG &Message,
bool &Handled)
{
if (Message.Msg==noMessTaskbar)
{
traitement
Handled = true;
}
else
Handled = false;
}
Ou tu change l'adresse du gestionnaire OnMessage de l'objet Application:
Exemple de l'aide:
const WM_FILEREADY = WM_USER + 2000;
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Application->OnMessage = AppMessage;
}
void __fastcall TForm1::AppMessage(tagMSG &Msg, bool &Handled)
{
if (Msg.message == WM_FILEREADY)
{
Memo1->Lines->LoadFromFile(AnsiString((char *)Msg.lParam));
Handled = true;
}
/* pour tous les autres messages, Handled conserve la valeur False pour que les autres gestionnaires de messages puissent répondre */
}
A propos de
Form1->Hide();
Sleep(1000);
Form1->Show();
Quand tu veux marquer une pause pour voir ce qui se passe, Sleep ne convient pas forcément car pendant ce temps la l'application est complétement bloquée, et donc elle ne répond pas a des messages externes.
Je préfère utiliser une autre méthode. Par exemple
DWORD AncTickCount = GetTickCount();
while (GetTickCount()-AncTickCount<1000u)
Application->ProcessMessages();
22 mars 2006 à 12:45
Tant pis, me reste plus qu'à retourner fouiller le net pour trouver le fonctionnement de maudit truc...
22 mars 2006 à 12:38
la valeur du message n'est pas connue à le compilation !
#define AM_TASKBAR_CREATED WM_APP + 409
c'est faux...
22 mars 2006 à 12:26
//------------------------------------
#define AM_TASKBAR_CREATED WM_APP + 409
void __fastcall TaskbarCreated ( TMessage &message );
VCL_MESSAGE_HANDLER(AM_TASKBAR_CREATED, TMessage, TaskbarCreated);
//------------------------------------
et ça dans mon .cpp
//------------------------------------
void __fastcall TForm1::TaskbarCreated ( TMessage &message )
{
Shell_NotifyIcon(NIM_ADD,&NI_Data);
}
//------------------------------------
Ca compile, ok, mais... j'ai testé en killant et recréant explorer dans le gestionnaire de tâches et l'icône est pas revenue, donc ça doit pas être bon.
Qu'est-ce que t'en penses, est-ce que tu vois ce qui ne vas pas ?
21 mars 2006 à 17:56
ca n'ira pas, avec ce message... les macros ne vont pas aimer : la valeur du message n'est connue qu'a l'execution, et pas a la compilation
21 mars 2006 à 17:54
Parce que si j'ai bien compris le AM_CALLBACK_MESSAGE est dédié à recevoir les interactions de la souris sur l'icône...
21 mars 2006 à 17:44
VCL_MESSAGE_HANDLER( AM_CALLBACK_MESSAGE, TMessage, NotifyCallback);
avec ce message là... seul pbm, on n'a la valeur du message qu'a l'execution...
21 mars 2006 à 17:39
21 mars 2006 à 17:35
@ Renfield : Bon ben finalement il semble que je me sois un peu trop avancé...
J'ai bien compris le principe mais je ne sais pas ce qu'est la "boucle de message principale".
Pourrais-tu m'expliquer ça plus en détail ici ou par mail (kalvados30@hotmail.fr) ??
Et dès que j'aurai mis ça en oeuvre je mettrais à jour ma source...
21 mars 2006 à 17:19
il est vrai que pour le builder on a pas des sources à gogo ;)
ça ma pas mal aidé
++
20 mars 2006 à 16:15
20 mars 2006 à 16:13
ca va te retourner un numéro de message (disons 'a')
il te suffit ensuite, juste d'attendre le message 'a' dans ta boucle de message principale...
quand il surviens, réinstalle ton icône
20 mars 2006 à 15:29
@Renfield : Oui j'ai vaguement vu ça sur un forum en anglais mais le mec était vraiment pas précis dans ses explications donc peut-être que tu pourrais m'expliquer, ça m'interesse :)
20 mars 2006 à 11:53
(event "TaskbarCreated")
20 mars 2006 à 11:35
Merci
20 mars 2006 à 11:31
TForm....
20 mars 2006 à 10:37
amusant, c'est quasi la meme logique que dans ce source...un peu plus complet :
http://www.cppfrance.com/codes/WIN32-MFC-VC6-PLACE-APPLI-BARRE-TACHES-OU_29682.aspx
d'ailleur, ça serai sympa de le compléter,
ça doit pas etre trop dur, je vais voir ça...
++
amateur de cachecache
Nono.