programa roda uma so vez

Delphi

26/07/2003

Ae, como eu faço para o meu programa roda uma so vez???
tipo ele fica na bandeja (do lado do relogio), então se ele for mandado executar dinovo eu quero que ele abra, no caso saia do hide para show.


Bigtama

Bigtama

Curtidas 0

Respostas

Glauberms

Glauberms

26/07/2003

Altere o código-fonte do arquivo Project1.dpr conforme abaixo:

[i:c92dfe06dc]program Project1;

uses
Forms, Windows,
Unit1 in ´Unit1.pas´ ;

{$R *.RES}

var
Handle: THandle;

begin
Handle := FindWindow(´Form1´, nil);
if Handle <> 0 then
begin { Já está aberto }
Application.MessageBox(´Este programa já está aberto.´ , ´Programa já aberto´, MB_OK);
if not IsWindowVisible(Handle) then
ShowWindow(Handle, SW_RESTORE);
SetForegroundWindow(Handle);
Exit;
end;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.[/i:c92dfe06dc]

[b:c92dfe06dc]Importante:

Verifique se o nome ([i:c92dfe06dc]NAME[/i:c92dfe06dc]) do formulário principal de sua aplicação é Form1 se não o substitua no código assima.

Para testar este programa você deverá compilar o projeto e fechar o Delphi. Depois, procure o Project1.exe (projeto compilado) usando o Windows Explorer e tente executá-lo mais de uma vez e veja o que acontece.[/b:c92dfe06dc]

Espero que seja suficiente...


GOSTEI 0
Bigtama

Bigtama

26/07/2003

vlw cara, mas tipo, eu queria algo que fizesse ele abri uma unica vez, e se eu tentase denovo ele iria ver se o Form1 estivese em modo show,dai se tivesse ele simplismente iria mostra na tela, se ele estivese em modo hide ele iria colocar modo show.
vc saberia como fazer isso???


GOSTEI 0
Fórum Vini

Fórum Vini

26/07/2003

vlw cara, mas tipo, eu queria algo que fizesse ele abri uma unica vez, e se eu tentase denovo ele iria ver se o Form1 estivese em modo show,dai se tivesse ele simplismente iria mostra na tela, se ele estivese em modo hide ele iria colocar modo show. vc saberia como fazer isso???

eh mais fácil ainda...

program Project1; 

uses 
  Forms, Windows, 
Unit1 in ´Unit1.pas´ ; 

{$R *.RES} 

var 
  Handle: THandle; 

begin 
  Handle := FindWindow(´Form1´, nil); 
  if Handle <> 0 then  
  begin { Já está aberto } 
    //Application.MessageBox(´Este programa já está aberto.´ , ´Programa já aberto´, MB_OK); //é só tirar essa linha
    if not IsWindowVisible(Handle) then  
    ShowWindow(Handle, SW_RESTORE); 
    SetForegroundWindow(Handle); 
    Exit; 
  end; 
  Application.Initialize; 
  Application.CreateForm(TForm1, Form1); 
  Application.Run; 
end. 

Para colocar o ícone no tray, de uma olhada aqui no clube que tem um artigo ou dica falando sobre isso...

Espero ter ajudado.

Vinicius


GOSTEI 0
Bigtama

Bigtama

26/07/2003

vlw, ajudo sim, vlw mesmo


GOSTEI 0
Bigtama

Bigtama

26/07/2003

ae deu os seguintes erros:

[Error] Tsuki.dpr(20): Undeclared identifier: ´FindWindow´
[Error] Tsuki.dpr(23): Undeclared identifier: ´IsWindowVisible´
[Error] Tsuki.dpr(24): Undeclared identifier: ´ShowWindow´
[Error] Tsuki.dpr(24): Undeclared identifier: ´SW_RESTORE´
[Error] Tsuki.dpr(25): Undeclared identifier: ´SetForegroundWindow´


GOSTEI 0
Bigtama

Bigtama

26/07/2003

ae deu os seguintes erros:

[Error] Tsuki.dpr(20): Undeclared identifier: ´FindWindow´
[Error] Tsuki.dpr(23): Undeclared identifier: ´IsWindowVisible´
[Error] Tsuki.dpr(24): Undeclared identifier: ´ShowWindow´
[Error] Tsuki.dpr(24): Undeclared identifier: ´SW_RESTORE´
[Error] Tsuki.dpr(25): Undeclared identifier: ´SetForegroundWindow´


GOSTEI 0
Voruss

Voruss

26/07/2003

use o componente JustOne, muito bom.
manda seu e-mail que eu te envio o componente.


GOSTEI 0
Bigtama

Bigtama

26/07/2003

hanimecenter@bol.com.br


GOSTEI 0
POSTAR