Directive inconnue sur une définition de procedure

John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009 - 15 août 2007 à 19:13
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009 - 16 août 2007 à 17:37
Salut à tous.

Je tente d'écrire une unité qui contiendrait les quelques fonctions élémentaires pour réduire une application dans le systray ...
Jusqu'à maintenant j'arrive à réduire et agrandir mon application, mais par contre impossible d'arriver à capturer un double-clic sur l'icône de l'application réduite.

D'après les nombreuses sources que j'ai trouvé ici et là, il faut utiliser les messages pour faire ce genre de choses.

Le hic, c'est que tous les exemples que j'ai pu tester fonctionnent bien, mais quand je fais un bête copier/coller de la procedure qui est censé gerer les messages, le compilateur ne veux plus en entendre parler (m'enerve celui là )

Voici texto ce que j'ai ecris (toute l'unité en question)
---------------------------------------------------

unit Reduction_SysTray;

interface

uses ShellAPI, Forms, Messages, Windows;

Const
  WM_MONICONE = WM_USER +1;

  procedure AjouterIcone(FenetreConcernee:TForm);
  procedure SupprimerIcone(FenetreConcernee:TForm);
  procedure ReduireFenetre(FenetreConcernee:TForm);
  procedure RestaurerFenetre(FenetreConcernee:TForm);
  procedure WMTrayIconMessage(var Msg: TMessage); message WM_MONICONE;

var
  FenetreApplication:TForm;

implementation

uses Fenetre_Principale;

procedure AjouterIcone(FenetreConcernee:TForm);
var
  Info:TNotifyIconData;
begin
  Info.cbSize           := SizeOf(Info);
  Info.Wnd              := FenetreConcernee.Handle;
  Info.uID              := 1;
  Info.szTip            := 'test';
  Info.hIcon            := Application.Icon.Handle;
  Info.uCallbackMessage := WM_MONICONE;
  Info.uFlags           := NIF_TIP Or NIF_ICON Or NIF_MESSAGE;
  Shell_NotifyIcon(NIM_ADD,@Info);
end;

procedure SupprimerIcone(FenetreConcernee:TForm);
var
  Info:TNotifyIconData;
begin
  Info.cbSize := SizeOf(Info);
  Info.Wnd    := FenetreConcernee.Handle;
  Info.uID    := 1;
  Shell_NotifyIcon(NIM_DELETE,@Info);
end;

procedure ReduireFenetre(FenetreConcernee:TForm);
begin
  FenetreApplication:=FenetreConcernee;
  AjouterIcone(FenetreConcernee);
  ShowWindow(Application.Handle, SW_HIDE);
end;

procedure RestaurerFenetre(FenetreConcernee:TForm);
begin
  ShowWindow(Application.Handle, SW_SHOW);
  Application.Restore;
  SupprimerIcone(FenetreConcernee);
end;

procedure WMTrayIconMessage(var Msg: TMessage);
begin
  if Msg.LParam=WM_LBUTTONDBLCLK then
    RestaurerFenetre(FenetreApplication);
end;

end.
----------------------------------------------------------------

A la compilation, ça coince à la ligne 14 :
> procedure WMTrayIconMessage(var Msg: TMessage); message WM_MONICONE
> [Erreur] Reduction_SysTray.pas(14): Directive inconnue : 'message'

Je vais devenir chèvre avec ces messages ... help

2 réponses

WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
16 août 2007 à 08:31
Bonjour

la directive message n'est utilisable qu'avec des méthodes, c'est à dire au sein de la définition d'une classe. Sinon il faut passer par la définition d'une fonction WndProc.

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
0
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
16 août 2007 à 17:37
Ha ... bin ça m'eclaire pas plus que ça
Concretement, qu'est ce qu'il faudrait rajouter à mon code pour que ça marche ?
0
Rejoignez-nous