Dali postoji neka opcija u Delphi-ju da spirijeci pokretanje dve instance jedne aplikacije, odnosno da pri pokretanju drugi put prikaze prvu instancu.
Znate vec na sta misilm.
mozes pri pokretanju aplikacije sa FindWindow da trazis naslov tvog prozora i ako dobijes neki handle (razlicit od 0) onda da izbacis poruku/ugasis svoju aplikaciju, mada je meni lakse da bacim ovo na formu...
Evo probaj sa ovim unitom, imas i full source code a koristis je sa:
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
CheckPrevious in 'CheckPrevious.pas';
{$R *.res}
begin
//samo jedna instanca programa je dozvoljena
if not CheckPrevious.RestoreIfRunning(Application.Handle, 1) then
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
end.
{ test mutex to see if we need to terminate or not }
if ( GetLastError() = ERROR_ALREADY_EXISTS ) or
( WaitForSingleObject(fMutex,100) = WAIT_TIMEOUT ) or
( fMutex = 0 ) then
begin
{ terminate our application }
Application.Terminate;
end;
finally
{ free our created mutex }
ReleaseMutex(fMutex);
end;
@Taranto
mudrolija sa konstruktorom -?!? NIJE U PITANJU INSTANCA KLASE U PROGRAMU, VEC MAIN FORMA! ... I GDE JE PRIMER KODA AKO JE U PITANJU "mala mudrolija" ?!?
Lol, sta komplicirate stvar kad je ovo najzesce rjesenje..
Citat:
JaHvram: mozes pri pokretanju aplikacije sa FindWindow da trazis naslov tvog prozora i ako dobijes neki handle (razlicit od 0) onda da izbacis poruku/ugasis svoju aplikaciju
U OnCreate forme stavis samo nesto ovako..
Code:
hnd:THandle;
begin
//...
hnd:=FindWindow(nil,'NazivMogPrograma');
if hnd<>0 then Application.Terminate;
Passwd: Lol, sta komplicirate stvar kad je ovo najzesce rjesenje..
U OnCreate forme stavis samo nesto ovako..
Code:
hnd:THandle;
begin
//...
hnd:=FindWindow(nil,'NazivMogPrograma');
if hnd<>0 then Application.Terminate;
....
+ code editor za glavnu formu (onaj u kom se nalazi TMainForma) mora biti zatvoren (sto ce zatvoriti i samu formu) u toku pokretanja programa inace ce hnd <> 0 i ako je prva instanca