Maitriser l'infobulle de windows dans la barre des taches [Résolu/Fermé]

Messages postés
346
Date d'inscription
jeudi 1 mai 2003
Dernière intervention
4 avril 2011
- - Dernière réponse : cs_nitrique
Messages postés
346
Date d'inscription
jeudi 1 mai 2003
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.
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
46
Date d'inscription
mercredi 25 février 2004
Dernière intervention
29 août 2012
3
Merci
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


 

Merci cs_systmd 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de cs_systmd
Messages postés
900
Date d'inscription
vendredi 3 novembre 2000
Dernière intervention
30 juillet 2009
0
Merci
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,
Commenter la réponse de cs_Loda
Messages postés
46
Date d'inscription
mercredi 25 février 2004
Dernière intervention
29 août 2012
0
Merci
Regarde içi



http://www.delphifr.com/codes/HOOK-CALENDRIER-AVEC-GESTION-AGENDA-DIRECTEMENT-SUR-VOTRE_22090.aspx



Dans la source, il y a ce que tu cherche, il me semble.
Commenter la réponse de cs_systmd
Messages postés
346
Date d'inscription
jeudi 1 mai 2003
Dernière intervention
4 avril 2011
0
Merci
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.
Commenter la réponse de cs_nitrique
Messages postés
46
Date d'inscription
mercredi 25 février 2004
Dernière intervention
29 août 2012
0
Merci
Il faut afficher la petite icône, pour que ton info bulle s'affiche

Il manque AjouteSysTrayIcone
Commenter la réponse de cs_systmd
Messages postés
346
Date d'inscription
jeudi 1 mai 2003
Dernière intervention
4 avril 2011
0
Merci
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.
Commenter la réponse de cs_nitrique
Messages postés
346
Date d'inscription
jeudi 1 mai 2003
Dernière intervention
4 avril 2011
0
Merci
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.
Commenter la réponse de cs_nitrique

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.