Maitriser l'infobulle de windows dans la barre des taches

Résolu/Fermé
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 - 1 sept. 2006 à 11:28
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 - 4 sept. 2006 à 10:36
Bonjour,

J'aimerais afficher un message d'alerte windows (les jeunes, ceux du style: "Il vous reste 10 jours pour activer windows").

Je sais qu'il existe un composant dans la jdvc mais j'aimerais passer outre.

Y a t-il un autre moyen que de créer une form qui y ressemble ?

Merci d'avance.

6 réponses

cs_systmd Messages postés 41 Date d'inscription mercredi 25 février 2004 Statut Membre Dernière intervention 29 août 2012
1 sept. 2006 à 15:09
Je sortie le code de la source voilà ce que ça donne


unit Unit1;


interface


uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,ShellApi,
  Dialogs, StdCtrls, Menus;
Const
wm_AppelMessage        = wm_user+1;
  WM_CallBackMessage     = WM_USER + 1;
  NIF_INFO               = $10;
  NIIF_INFO              = $00000001;


type
   PNewNotifyIconData = ^TNewNotifyIconData;
   TDUMMYUNIONNAME    = Record
     Case Integer Of
        0: (uTimeout: UINT);
        1: (uVersion: UINT);
     End;
     TNewNotifyIconData = Record
     cbSize: DWORD;
     Wnd: HWND;
     uID: UINT;
     uFlags: UINT;
     uCallbackMessage: UINT;
     hIcon: HICON;
     //Version 5.0 is 128 chars, old ver is 64 chars
     szTip: Array [0..127] of Char;
     dwState: DWORD; //Version 5.0
     dwStateMask: DWORD; //Version 5.0
     szInfo: Array [0..255] Of Char; //Version 5.0
     DUMMYUNIONNAME: TDUMMYUNIONNAME;
     szInfoTitle: Array [0..63] Of Char; //Version 5.0
     dwInfoFlags: DWORD;   //Version 5.0
   End;
type
  TForm1 = class(TForm)
    Button1: TButton;
    PopupMenu1: TPopupMenu;
    Quitter1: TMenuItem;
    procedure btn1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Quitter1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);




  private
    { Déclarations privées }
     procedure WMAppelMessage(var msg : TMessage); message wm_AppelMessage; //tray
     Procedure AfficheBulleTips;
     Procedure SupprimeSysTrayIcone;
     Procedure AjouteSysTrayIcone;
  public
    { Déclarations publiques }
  end;


var
  Form1: TForm1;
  nid              :TNewNotifyIconData; //Tray Icône


implementation


{$R *.dfm}
//----------------------------------------------------------------------------//
//  Appel commande icone du Tray                                              //
//----------------------------------------------------------------------------//
procedure TForm1.WMAppelMessage(var msg : TMessage);
Var Curs:TPoint;
begin
//Si Clique droit de la souris
if msg.LParam=Wm_RButtonDown then
  begin
  SetForegroundWindow(Handle);
  GetCursorPos(Curs); //Récupère les coordonnées de la souris
  PopupMenu1.Popup(Curs.X,Curs.Y); //Ouvre le menu surgissant à l'emplacement spécfié par les coordonnees de la souris
  PostMessage(Handle,WM_NULL,0,0);
  end;
end; 
//----------------------------------------------------------------------------//
// Affiche une bulle pour informer                                            //
//----------------------------------------------------------------------------//
Procedure TForm1.AfficheBulleTips;
Var
  TipsInfo, TipsTitre: String;
begin
   nid.cbSize := SizeOf(nid);
   nid.uFlags := NIF_INFO;
   TipsInfo :=  'Le Hook du Calendrier est activé.';
   strPLCopy(nid.szInfo, TipsInfo, SizeOf(nid.szInfo) - 1);
   nid.DUMMYUNIONNAME.uTimeout := 3000;
   TipsTitre := 'Surveillance du Bureau';
   strPLCopy(nid.szInfoTitle, TipsTitre, SizeOf(nid.szInfoTitle) - 1);
   // Symbole affiché dans la bulle
   // NIIF_INFO    --> Bulle i
   // NIIF_ERROR   --> Croix x  rouge
   // NIIF_WARNING --> Triangle Jaune
   nid.dwInfoFlags := NIIF_INFO; //NIIF_ERROR;//NIIF_WARNING;
   Shell_NotifyIcon(NIM_MODIFY, @nid);
end;


//----------------------------------------------------------------------------//
// Ajoute l'icone de l'application dans la barre de Notification              //
//----------------------------------------------------------------------------//
Procedure TForm1.AjouteSysTrayIcone;
Begin
   nid.cbSize           := SizeOf(nid);
   nid.Wnd              := Handle ;
   nid.uID              := 0;
   nid.uFlags           := NIF_ICON or NIF_MESSAGE or NIF_TIP;
   nid.uCallbackMessage := WM_CallBackMessage;
   nid.hIcon            := Application.Icon.Handle;
   // Message du Hint
   strPLCopy(nid.sztip,'Essai info bulle' , SizeOf(nid.sztip) - 1);
   Shell_NotifyIcon(NIM_ADD, @nid);
end;  
//----------------------------------------------------------------------------//
// Supprime l'icone de l'application dans la barre de Notification            //
//----------------------------------------------------------------------------//
Procedure TForm1.SupprimeSysTrayIcone;
Begin
Shell_NotifyIcon(Nim_DELETE,@nid); //Supprime le tray icon
End;


procedure TForm1.FormCreate(Sender: TObject);
begin
AjouteSysTrayIcone;
end;


procedure TForm1.Quitter1Click(Sender: TObject);
begin
Close;
end;


procedure TForm1.btn1Click(Sender: TObject);
Begin
AfficheBulleTips;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
SupprimeSysTrayIcone;
end;


end.

Bon code


 
3
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
1 sept. 2006 à 11:44
je pas te le dire de mémoire, mais j'ai vu une fois un sujet/source qui en parlait sur ce site.

si je met la main dessus, je te poset le lien.

bon code,
0
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 1
1 sept. 2006 à 12:42
J'ai pris son code mais n'arrive pas, malgré tout, à le faire marcher.

Const
NIF_INFO = $10;
NIIF_INFO = $00000001;

type
PNewNotifyIconData = ^TNewNotifyIconData;
TDUMMYUNIONNAME = Record
Case Integer Of
0: (uTimeout: UINT);
1: (uVersion: UINT);
End;
TNewNotifyIconData = Record
cbSize: DWORD;
Wnd: HWND;
uID: UINT;
uFlags: UINT;
uCallbackMessage: UINT;
hIcon: HICON;
//Version 5.0 is 128 chars, old ver is 64 chars
szTip: Array [0..127] of Char;
dwState: DWORD; //Version 5.0
dwStateMask: DWORD; //Version 5.0
szInfo: Array [0..255] Of Char; //Version 5.0
DUMMYUNIONNAME: TDUMMYUNIONNAME;
szInfoTitle: Array [0..63] Of Char; //Version 5.0
dwInfoFlags: DWORD; //Version 5.0
End;

procedure TfrmMain.btn1Click(Sender: TObject);
Var
TipsInfo, TipsTitre: String;
Begin
nid.cbSize := SizeOf(nid);
nid.uFlags := NIF_INFO;
TipsInfo := 'Le Hook du Calendrier est activé.';
strPLCopy(nid.szInfo, TipsInfo, SizeOf(nid.szInfo) - 1);
nid.DUMMYUNIONNAME.uTimeout := 3000;
TipsTitre := 'Surveillance du Bureau';
strPLCopy(nid.szInfoTitle, TipsTitre, SizeOf(nid.szInfoTitle) - 1);
// Symbole affiché dans la bulle
// NIIF_INFO --> Bulle i
// NIIF_ERROR --> Croix x rouge
// NIIF_WARNING --> Triangle Jaune
nid.dwInfoFlags := NIIF_INFO; //NIIF_ERROR;//NIIF_WARNING;
Shell_NotifyIcon(NIM_MODIFY, @nid);

Tout compile... Je ne vois pas ce qu'il peut me manquer.
0
cs_systmd Messages postés 41 Date d'inscription mercredi 25 février 2004 Statut Membre Dernière intervention 29 août 2012
1 sept. 2006 à 12:55
Il faut afficher la petite icône, pour que ton info bulle s'affiche

Il manque AjouteSysTrayIcone
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 1
1 sept. 2006 à 13:48
J'ai bien un icone dans la barre des taches mais ce n'est pas un composant, je le crée dynamiquement.

A quel moment je doit le renseigner ? je ne vois pas le lien fait entre l'infobulle et l'icone.
0
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 1
4 sept. 2006 à 10:36
Extra, ça marche...

Merci pour ton aide.

Je me demandais si ce n'etait pas possible d'externeliser ça ne créant une unité spéciale.
0
Rejoignez-nous