CO ROBIE ZLE?? [pisz sensowne teamty]

0

mam taki kawałek kodu ktory zapobiega powtornemu uruchomieniu programu
tylko wyrzuca go z tray'a i czyni aktywnym.
Jesli minimalizujemy program, chowa sie on do tray'a i tu jest OK,
ale jesli chcemy drugi raz zminimalizowac program to
ikona minimalizacji nie dziala, a klikajac prawym przyciskiem na belce
mozliwosc minimalizuj jest nieaktywna, ale mozna przywrocic program.
Czyli Windows musli ze program jest caly czas zminimalizowany.
CO ROBIE ZLE
POMOCY

program Test;

uses
Forms,
Windows,
SysUtils,
Controls,
aaa in 'aaa.pas' {Form1};

{$R *.RES}

var
handle : THandle;

begin
Application.Title := '';
handle := CreateMutex(nil, false, 'unikaty');
if (handle <> 0) and (GetLastError = 0) then
begin
Application.Initalize;
Application.Title := 'Test';
Application.CreateForm(TForm1, Form1);
Application.Run;
if handle <> 0 then CloseHandle(handle);
end
else
begin
HPrevInst := FindWindow('TForm1', 'Test');
if not IsWindowVisible(HPrevInst) then
ShowWindow(HPrevInst, SW_RESTORE);
SetActiveWindow(HPrevInst);
SetForegroundWindow(HPrevInst);
end;
end.

0

Ja to trochę inaczej rozwiązałem, ponieważ sposób podobny do twojego nie działał dokładnie tak jak oczekiwałem. Też miałem problemy z ponownym minimalizowaniem, czy też z wysuwaniem okna na wierzch... itp. Tak czy siak nie działało jak chciałem.
Więc zrobiłem tak:

W Project Source:

var
 OldHnd: THandle;
const
 MYMSG = NUMER // jakis unikalny numer wiadomości
begin
  OldHnd := FindWindow('Klasa', 'Nazwa okna');
  if OldHnd <> 0 then
      begin
          PostMessage(OldHnd, MYMSG, 0, 0);
          Exit;
      end;
// dalsza częsć kodu

W unicie głównej formy:

const
 MYMSG = NUMER // KONIECZNIE ten sam numer co wyżej

type
  TMainForm = class(TForm)
{...}
  private
   procedure OnMsg(var Msg: TMessage); message MYMSG;
{...}

procedure TMainForm.OnMsg(var Msg: TMessage);
begin
 // tutaj kod jaki ma być wykonany gdy uruchomimy applikację 2 raz
end;

To jaki numer wybrać dla MYMSG już zdecyduj sam. Musisz jednak poczytać o zakresie w jakim musi się on znajdować i jakich wartości nie może przyjmować. Więcej na ten temat znajdziesz w MSDN Library.

1 użytkowników online, w tym zalogowanych: 0, gości: 1