begin process at 2010 02 09 23:37:32
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > CRÉEZ VOTRE PREMIÈRE TRAY ICON . CODE TRÈS SIMPLE ET ACCESSIBLE...

CRÉEZ VOTRE PREMIÈRE TRAY ICON . CODE TRÈS SIMPLE ET ACCESSIBLE...


 Information sur la source

Note :
7,25 / 10 - par 8 personnes
7,25 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :API Classé sous :systray, icone, tray, callback, notify Niveau :Débutant Date de création :20/03/2006 Vu :11 076

Auteur : kalvados

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

 Description

Cliquez pour voir la capture en taille normale
Bonjour,
Je sais qu'il existe déjà des sources traîtant ce sujet sur le site, mais comme j'ai malgré tout eu beaucoup de mal à m'en sortir, je me suis dit qu'une source très allégée portant UNIQUEMENT sur l'utilisation des tray icons ne ferait de mal à personne...
Donc je vous livre le .cpp et le .h en esperant que ma première contribution (hé oui) sera utile à quelqu'un...

Nous verrons donc la création et la suppression de l'icône ainsi que la détection d'une action de la souris sur l'icône (clik, double-clik...).
L'idée du programme est en fait de "minimiser" l'IHM dans le systray. j'ai mis des guillemets parce qu'en réalité je n'utilise pas LE bouton minimiser mais un bouton disposé sur l'IHM à cet effet... toujours est-il qu'ensuite il faut double-cliquer sur l'icône pour retrouver l'IHM.

Source

  • Unit1.cpp
  • //---------------------------------------------------------------------------
  • #include <vcl.h>
  • #include <windows.h>
  • #include <iostream.h>
  • #pragma hdrstop
  • #include "Unit1.h"
  • //---------------------------------------------------------------------------
  • #pragma package(smart_init)
  • #pragma resource "*.dfm"
  • TForm1 *Form1;
  • //---------------------------------------------------------------------------
  • __fastcall TForm1::TForm1(TComponent* Owner)
  • : TForm(Owner)
  • {
  • }
  • //---------------------------------------------------------------------------
  • void __fastcall TForm1::Button1Click(TObject *Sender)
  • {
  • Form1->Hide(); //Rigolez-pas, je sais que ça sert à rien mais c'était pour
  • Sleep(1000); //pour voir si la fenêtre partait de la barre des tâches
  • Form1->Show(); //quand on la cachait...
  • }
  • //---------------------------------------------------------------------------
  • void __fastcall TForm1::Button2Click(TObject *Sender)
  • {
  • Form1->Hide();
  • NI_Data.cbSize = sizeof( NOTIFYICONDATA );
  • // Cela permet à Windows de savoir avec quelle version de la structure
  • // on souhaite travailler
  • NI_Data.hWnd = this->Handle;
  • // C'est à ce handle que windows va envoyer les messages provenant de
  • // l'icône : permet de gérer les cliks, etc.
  • NI_Data.uID = 0;
  • // C'est l'identifiant de l'icône dans l'application. Cela permet à
  • // Windows de faire la distinction entre différents icônes de notification
  • // que l'application a crée.
  • NI_Data.hIcon = Application->Icon->Handle;
  • // Par défaut notre icone de notification aura le même icone que
  • // l'application.
  • NI_Data.uCallbackMessage = AM_CALLBACK_MESSAGE;
  • //Permet d'intercepter les messages venant du systray (cliks...)
  • NI_Data.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
  • strcpy(NI_Data.szTip, "Appli de test de trayicon");
  • //Permet de définir le texte de l'infobulle...
  • Shell_NotifyIcon(NIM_ADD,&NI_Data);
  • }
  • //---------------------------------------------------------------------------
  • void __fastcall TForm1::NotifyCallback(TMessage &message)
  • {
  • if ( message.WParam == 0 )
  • // WParam contient l'indice de l'icone de l'appication.
  • // En effet une application peut avoir plusieurs icones de notification
  • // c'est l'indice que nous avison mis dans uID de la structure de type
  • // NOTIFYICONDATA
  • {
  • if ( message.LParam == WM_LBUTTONDBLCLK ) //WM_RBUTTONUP, WM_LBUTTONDOWN...
  • {
  • Form1->Show();
  • Sleep(100); //pas indispensable mais si vous avez comme moi l'icône de MSN
  • //juste à côté de "la votre" vous comprendrez l'utilité :)
  • NI_Data.uFlags = 0;
  • Shell_NotifyIcon(NIM_DELETE,&NI_Data);
  • }
  • }
  • }
  • //---------------------------------------------------------------------------
  • Unit1.h
  • //---------------------------------------------------------------------------
  • #ifndef Unit1H
  • #define Unit1H
  • //---------------------------------------------------------------------------
  • #include <Classes.hpp>
  • #include <Controls.hpp>
  • #include <StdCtrls.hpp>
  • #include <Forms.hpp>
  • #define AM_CALLBACK_MESSAGE WM_APP + 408
  • //---------------------------------------------------------------------------
  • class TForm1 : public TForm
  • {
  • __published: // Composants gérés par l'EDI
  • TButton *Button1;
  • TButton *Button2;
  • void __fastcall Button1Click(TObject *Sender);
  • void __fastcall Button2Click(TObject *Sender);
  • protected:
  • void __fastcall NotifyCallback ( TMessage &message );
  • BEGIN_MESSAGE_MAP
  • VCL_MESSAGE_HANDLER( AM_CALLBACK_MESSAGE, TMessage, NotifyCallback);
  • END_MESSAGE_MAP(TForm);
  • private:
  • NOTIFYICONDATA NI_Data;
  • public:
  • __fastcall TForm1(TComponent* Owner);
  • };
  • //---------------------------------------------------------------------------
  • extern PACKAGE TForm1 *Form1;
  • //---------------------------------------------------------------------------
  • #endif
  • //---------------------------------------------------------------------------
Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#include <windows.h>
#include <iostream.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   Form1->Hide(); //Rigolez-pas, je sais que ça sert à rien mais c'était pour
   Sleep(1000);   //pour voir si la fenêtre partait de la barre des tâches
   Form1->Show(); //quand on la cachait...
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
   Form1->Hide();

   NI_Data.cbSize = sizeof( NOTIFYICONDATA );
      // Cela permet à Windows de savoir avec quelle version de la structure
      // on souhaite travailler
   NI_Data.hWnd = this->Handle;
      // C'est à ce handle que windows va envoyer les messages provenant de
      // l'icône : permet de gérer les cliks, etc.
   NI_Data.uID = 0;
      // C'est l'identifiant de l'icône dans l'application. Cela permet à
      // Windows de faire la distinction entre différents icônes de notification
      // que l'application a crée.
   NI_Data.hIcon = Application->Icon->Handle;
      // Par défaut notre icone de notification aura le même icone que
      // l'application.
   NI_Data.uCallbackMessage = AM_CALLBACK_MESSAGE;
      //Permet d'intercepter les messages venant du systray (cliks...)
   NI_Data.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
   strcpy(NI_Data.szTip, "Appli de test de trayicon");
      //Permet de définir le texte de l'infobulle...
   Shell_NotifyIcon(NIM_ADD,&NI_Data);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::NotifyCallback(TMessage &message)
{
   if ( message.WParam == 0 )
   // WParam contient l'indice de l'icone de l'appication.
   // En effet une application peut avoir plusieurs icones de notification
   // c'est l'indice que nous avison mis dans uID de la structure de type
   // NOTIFYICONDATA
   {
      if ( message.LParam == WM_LBUTTONDBLCLK ) //WM_RBUTTONUP, WM_LBUTTONDOWN...
      {
         Form1->Show();
         Sleep(100); //pas indispensable mais si vous avez comme moi l'icône de MSN
		     //juste à côté de "la votre" vous comprendrez l'utilité :)
         NI_Data.uFlags = 0;
         Shell_NotifyIcon(NIM_DELETE,&NI_Data);
      }
   }
}
//---------------------------------------------------------------------------




Unit1.h
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>

#define AM_CALLBACK_MESSAGE   WM_APP + 408
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:	// Composants gérés par l'EDI
        TButton *Button1;
        TButton *Button2;
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Button2Click(TObject *Sender);
protected:
        void __fastcall NotifyCallback ( TMessage &message );

        BEGIN_MESSAGE_MAP
          VCL_MESSAGE_HANDLER( AM_CALLBACK_MESSAGE, TMessage, NotifyCallback);
        END_MESSAGE_MAP(TForm);

private:
        NOTIFYICONDATA    NI_Data;
public:
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------

 Conclusion

Bon, comme je l'avais dit c'est vraiment léger, mais quand on a bien compris ça, on peut très vite et facilement améliorer...
Par exemple on peut ajouter :
//----------------------------------------------- ----------------------------
if ( message.LParam == WM_RBUTTONUP ) //réagit quand on relâche le clik droit
{
   PopupMenu1->Popup( Mouse->CursorPos.x, Mouse->CursorPos.y );
   //ouvre un menu popup là où se trouve la souris ;)
}
//------------------------------------------- --------------------------------
On peut également utiliser "Shell_NotifyIcon(NIM_MODIFY,&NI_Data);" après modifié des éléments de la structure afin de modifier l'icône ou le texte de l'infobulle etc...

Voilà, je vous souhaite bonne prog et @+


 Sources de la même categorie

Source avec Zip Source avec une capture CALENDRIER (WIN64) par BruNews
Source avec Zip Source avec une capture IMPRESSION EN WIN32 API AVEC OPTIONS par racpp
Source avec Zip Source avec une capture INFOTIP SHELL EXTENSION (BULLE DE L'EXPLORATEUR WINDOWS) (WI... par racpp
Source avec Zip Source avec une capture BROUILLAGE DES FICHIERS JAVASCRIPT ET CSS(WIN32) par gagah1
Source avec Zip Source avec une capture CHANGE CURSEUR par ganjarasta

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture LOGICIEL DE SAUVEGARDE COMPLET AVEC ENCRYPTAGE (7-ZIP) [DEV-... par ryokan
Source avec Zip Source avec une capture WALLPAPERS, CHANGEMENT DE FOND D'ÉCRAN AUTOMATISÉ... par ndubien
Source avec Zip Source avec une capture CONTROLEUR DE VOLUME SONORE EN C [ API WINDOWS ] par ordiman85
Source avec Zip Source avec une capture GIANTTAUPEKILLER (CHASSE-TAUPES) par ndubien
Source avec Zip Source avec une capture WINDOG LE CHIEN par magma

Commentaires et avis

Commentaire de magic_Nono le 20/03/2006 10:37:02

:)
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.

Commentaire de magic_Nono le 20/03/2006 11:31:42

précision : le code publié ici est pour BORLAND uniquement !!!

TForm....

Commentaire de norton le 20/03/2006 11:35:03

Hello, bravo pour cette source simple d'utilisation elle m'a beaucoup aidé.
Merci

Commentaire de Renfield le 20/03/2006 11:53:00 administrateur CS

pensez a recréer vos icones, en cas de crash de Explorer...

(event "TaskbarCreated")

Commentaire de kalvados le 20/03/2006 15:29:23

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 :)

Commentaire de Renfield le 20/03/2006 16:13:15 administrateur CS

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

Commentaire de kalvados le 20/03/2006 16:15:38

Ok merci, ça devrait aller avec ça :)

Commentaire de virtuA le 21/03/2006 17:19:20

Je te remercie,
il est vrai que pour le builder on a pas des sources à gogo ;)

ça ma pas mal aidé

++

Commentaire de kalvados le 21/03/2006 17:35: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...

Commentaire de n0ne le 21/03/2006 17:39:32

Pas mal, pas mal :). Code propre, simple, efficace. Que demander de plus.

Commentaire de Renfield le 21/03/2006 17:44:26 administrateur CS

je pense qu'il te faut ajouter un

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...

Commentaire de kalvados le 21/03/2006 17:54:15

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...

Commentaire de Renfield le 21/03/2006 17:56:47 administrateur CS

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

Commentaire de kalvados le 22/03/2006 12:26:17

J'ai rajouté ça dans mon .h :
//------------------------------------
#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 ?

Commentaire de Renfield le 22/03/2006 12:38:00 administrateur CS

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...

Commentaire de kalvados le 22/03/2006 12:45:30

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...

Commentaire de olbal le 22/03/2006 14:12: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é:

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();


Commentaire de kalvados le 22/03/2006 19:19:29

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 :)

Commentaire de magic_Nono le 23/03/2006 17:16:37

la 3e méthode est en effet en utilisant les mfc...

Commentaire de olbal le 23/03/2006 18:27:18

->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!

Commentaire de budo le 27/03/2006 08:58:49

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.

Commentaire de olbal le 27/03/2006 13:08:58

->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.


Commentaire de kalvados le 27/03/2006 14:11:10

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 :)

Commentaire de magic_Nono le 27/03/2006 16:10:34

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

Commentaire de olbal le 27/03/2006 16:40:55

-> 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)

{
  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

Commentaire de kalvados le 27/03/2006 17:29:17

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 :)

Commentaire de budo le 27/03/2006 20:58:24

->olbal
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


Commentaire de neria le 14/05/2006 11:01:13

Merci ! C'est exactement ce que je cherchais !!

Commentaire de wxccxw le 09/06/2006 21:37:31

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++
@+

Commentaire de kalvados le 10/06/2006 01:51:02

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 ;)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Icone dans le system tray [ par Cpphewie ] Bonjour, je cherche d&#233;sesp&#233;rement comment faire une icone dans le systray ( en c sous gtk+2 de preference ). J'ai lu dans la reference gtk Tray Icon, comment ca fonctionne ?? [ par zadounet ] Quelqu'un sait par hasard comment programmer en Vc++ 6.0 pour faire une icone dans la bar (Tray Mode) et pour faire changer cette icone. Un peu comme ressources, aide pour menu pour icone dans la systray [ par leprov ] salut a tous.voila j'aimerais savoir si avec l'editeur de ressources de visual c++, il est possible de faire changer un titre dans le menu qu'on crée WM_TRAY_ICONE [ par deck_bsd ] Bonjour à tous,Voila j'ai réussi à afficher et retirer un icone dans la systray. Maintenant je voudrai que lorsque je clique sur l'icone la fenêtre di Simuler un doubleclik depuis Windev sur un icone du systray ? [ par nascimo ] Bonjour, je n'arrive pas à simuler un doubleclik sur un iconne du systray depuis Windev ...Je récupére bien le handle de la fenêtre mais la commande s Pb avec menu d'un systray [ par myckie ] bonjour j'ai coder un bouton sur mon programme afin qu'il mette une icone dans la barre de tray ( a coté de l'heure) a cette icone j'y ai ajouter un m Progression en Qt4 dans le systray - Faire une icone dynamique [ par alphaone ] Bonjour, je voudrai pouvoir afficher une progression dans le systray à coté de l'heure en Qt, avec une icône qui ce dégrise au fur et à mesure et indi retirer l'icone systray d'une app externe [ par devloop2 ] Bonjour à tous !(c'est mon premier post ici ;) )d'abord j'espère ne pas me tromper de section...Voilà j'utilise un logiciel qui met son icone dans la Comment mettre l'icone de son choix sur un EXE? [ par supergrey ] Bonjour, je voudrais savoir comment mettre une icone choisie dans un dossier, sur un .EXE (qui n'est pas le programme)Merci. interraction windows systray [ par leprov ] salut a tous.bon voici mon probleme. je voudrais faire un programme qui effectue un traitement au demarrage de session, puis un autre en fermeture de


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

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,764 sec (3)

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