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

Signaler
Messages postés
346
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
-
cs_nitrique
Messages postés
346
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
-
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

Messages postés
41
Date d'inscription
mercredi 25 février 2004
Statut
Membre
Dernière intervention
29 août 2012

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


 
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
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,
Messages postés
346
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
1
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.
Messages postés
41
Date d'inscription
mercredi 25 février 2004
Statut
Membre
Dernière intervention
29 août 2012

Il faut afficher la petite icône, pour que ton info bulle s'affiche

Il manque AjouteSysTrayIcone
Messages postés
346
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
1
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.
Messages postés
346
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
1
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.