restaurer une appli du tray

restaurer une appli du tray - Delphi/Pascal - Programmation

Marsh Posté le 28-09-2004 à 11:36:31    

Bonjour, voila mon probleme :  
mon appli est minimalisée dans le tray icon. Je voudrai que lorsque l'on essai de relancer une deuxième fois l'application, l'application ne se relance pas mais que l'odre soit donné à l'appli minimalisée dans le tray d'apparaitre au premier plan:
mon code pour le moment est :  

Code :
  1. begin
  2.   SetLastError(NO_ERROR);
  3.   CreateMutex(nil, False, 'MonAppli.exe');
  4.   if GetLastError = ERROR_ALREADY_EXISTS
  5.     then  Application.BringToFront//ici il faudrait dire à l'appli de se  
  6. //déminimaliser du tray et d'apparaitre au premier plan
  7.   else
  8.   begin
  9.     Application.Initialize;
  10.     Application.CreateForm(TFMonapplmi, FMonappli);
  11.     Application.Run;
  12.   end;
  13. end.


Message édité par endemyon le 28-09-2004 à 11:37:40

---------------
Mes photos : http://500px.com/endemyon
Reply

Marsh Posté le 28-09-2004 à 11:36:31   

Reply

Marsh Posté le 28-09-2004 à 12:01:49    

Ton problème est que dans la ligne "Application.BringToFront", la variable "Application" fait référence à la seconde appli qui vient d'être relancée et non celle qui est déjà chargée et planquée dans le SysTray.
Il faut que tu :
- obtiennes le "Handle" de ton appli déjà lancée. Regarde "FindWindow()" avec le titre de ton appli, mais attention tu risques de retomber encore sur la seconde appli ! Il faudrait lui attribuer un titre qu'après cette première étape passée (Application.Title = "" / FindWindow(Appli_Title) / Application.Title = Appli_Title). Il doit exister d'autres méthodes plus simples et plus sûres.
- réaffiches ton appli au premier plan avec SetForegroundWindow().
Note : FindWindow() et SetForegroundWindow() sont des fonctions de l'API Windows.
(je ne peux pas trop entrer dans les détails, je ne connais pas Delphi mais C++Builder).


Message édité par lsdYoYo le 28-09-2004 à 12:08:39
Reply

Marsh Posté le 29-09-2004 à 09:58:11    

Merci, ça marche avec ce code.

Code :
  1. begin
  2.   SetLastError(NO_ERROR);
  3.   CreateMutex(nil, False, 'MyApp.exe');
  4.   if GetLastError = ERROR_ALREADY_EXISTS then
  5.   begin
  6.     application.Title:='';
  7.     handle:=findWindow(nil,'MyApp');
  8.     application.title:= 'MyApp.exe';
  9.     ShowWindow(Handle, SW_RESTORE);
  10.   end
  11.   else
  12.   begin
  13.     Application.Initialize;
  14.     Application.CreateForm(TFMyApp, FMyApp);
  15.     Application.Run;
  16.   end;
  17. end.


---------------
Mes photos : http://500px.com/endemyon
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed