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, 1, 1, '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. |