Form - Uma so instancia

Top  Previous  Next

//Usando semaforos:

//=================

 

// fonte do dpr

var

  hdlAplicacao: THandle;

begin

  // Ligar o sinal "vermelho" para indicar que já está rodando

  CreateSemaphore(nil, 11'Project1 - Nome do Semáforo tem que ser único.');

  // Se o sinal já estava "vermelho"

  if GetLastError = ERROR_ALREADY_EXISTS then

  // Então ativar a janela original e terminar

  begin

    hdlAplicacao := FindWindow(nil, 'Form1');

    if not isWindowVisible(hdlAplicacao) then ShowWindow(hdlAplicacao, SW_RESTORE);

    SetForegroundWindow(hdlAplicacao);

  end

  else // Senão continuar o processamento normal

  begin

    Application.Initialize;

    Application.CreateForm(TForm1, Form1);

    Application.Run;

  end;

end.

 

=====================================================================================

// Usando Mutex

 

var

  X : THandle;

 

begin

  X := CreateMutex(nil, False, 'QualquernomeMutex');

  if WaitForSingleObject(X, 0) <> wait_TimeOut then

  begin

    Application.Initialize;

    Application.CreateForm(TClientForm, ClientForm);

    Application.Run;

  end;

end.

 

=====================================================================================

// Outra maneira

 

> DPR

uses

  Forms, *****Windows, Dialogs, ******

 

{$R *.RES}

 

var

   X:LongInt;

begin

     X:=FindWindow('TForm1','Caption da Form1');

     If X>0 then

     Begin

          ShowMessage('A Form1 já está ativa!');

          SetForegroundWindow(X);

     end

     else

     Begin

          Application.Initialize;

          Application.CreateForm(TForm1, Form1);

          Application.Run;

     end;

end.