Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Code poslije Application->Terminate()

[es] :: C/C++ programiranje :: Code poslije Application->Terminate()

[ Pregleda: 2598 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

monte_sandman
Mark Andrej
heaven

Član broj: 61080
Poruke: 60
*.crnagora.net.



Profil

icon Code poslije Application->Terminate()25.01.2007. u 23:22 - pre 209 meseci
Kako omoguciti da program odradi neki kod poslije pritiska na X odnosno izlaska iz programa?Preciznije potrebno mi je da program poslije pritiska na Exit upise nesto u odredjeni fajl.Nesto slicno log fajlovima kod miRC-a ili playlist-i kod WinaMpa..

Thanx!
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4901
*.tekostolac.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Code poslije Application->Terminate()26.01.2007. u 07:27 - pre 209 meseci
Citat:

Kako omoguciti da program odradi neki kod poslije pritiska na X odnosno izlaska iz programa?


Pretpostavljam da koristiš Borland C++ Builder, pošto pominješ Application->Terminate().

U tom slučaju, postoji par tipičnih mesta gde se taj kod može staviti, a svaki ima neke prednosti
i nedostatke:

1) DESTRUKTOR glavne forme
2) OnClose() događaj glavne forme
3) OnCloseQuery() događaj glavne forme

---

1) Destruktor glavne forme nije inicijalno napravljen od strane IDE-a, i moraš ga ručno postaviti:

--- H ---
Code:

// ... recimo, stavi ga odmah ispod konstruktora ...
__fastcall ~TForm1();
// ...

--- CPP ---
Code:

// ...
__fastcall TForm1::~TForm1()
{
   // OVDE MOŽE DA DOĐE TVOJ KOD KOJI UPISUJE ZAVRŠNE PODATKE ... 
}
// ...


Nemoj umesto destruktora koristiti događj OnDestroy(), koji je Delphi idiom za istu stvar, jer postoji
istorijat neobičnog ponašanja ovog događaja u smislu C++ programa, koji imaju drugačije standarde
kada je u pitanju destrukcija. Takođe, slično tome, ne koristi ni OnCreate() umesto konstruktora.

Konstruktor nemoj koristiti ako tvoji završni podaci zavise od POKAZIVAČA Form1, Form2 ili bilo čega
drugog što je možda u trenutku destrukcije uništeno ili može biti uništeno. Tada ćeš dobiti neki
Access Violation.

2) OnClose

OnClose() događaj je zgodno mesto za ovakve stvari:

Code:

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
   // ... OVDE TVOJ ZAVRŠNI KOD ...
}

Ukoliko ne želiš da se program završi pritiskom na [X], možeš to sprečiti sa:
Code:

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
   // ...
   Action=caNone; // <--- PROGRAM SE NEĆE ZAVRŠTI. OVO JE ZGODNO ZA DIJALOGE ...
   // ... KOJI TE PITAJU DA LI SIGURNO ŽELIŠ DA ZATVORIŠ APLIKACIJU
}


3) OnCloseQuery

OnCloseQuery() je jako sličan događaj kao i OnClose().

Code:

void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
   // ... OVDE TVOJ ZAVRŠNI KOD ...
}

Ukoliko ne želiš da se program završi pritiskom na [X], možeš to sprečiti sa:
Code:

void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
   // ...
   CanClose=false; // <--- PROGRAM SE NEĆE ZAVRŠTI. OVO JE ZGODNO ZA DIJALOGE ...
   // ... KOJI TE PITAJU DA LI SIGURNO ŽELIŠ DA ZATVORIŠ APLIKACIJU
}


Prednost OnCloseQuery je u tome što će se ovaj deo koda automtski pozvati čak i kada
neko drugi krene da zatvara Windows-e (ShutDown) ili ide na promenu korisnika (Log off).

Tj., uhvatiće se poruka:WM_QUERYENDSESSION.

Predlažem da koristiš ovu mogućnost 3. Bitno je da osiguraš da CanClose bude TRUE, jer će
u suprotnom Winodws beskonačno dugo čekati na zatvaranje.



[Ovu poruku je menjao X Files dana 26.01.2007. u 18:21 GMT+1]
 
Odgovor na temu

monte_sandman
Mark Andrej
heaven

Član broj: 61080
Poruke: 60
*.proxy.cg.yu.



Profil

icon Re: Code poslije Application->Terminate()26.01.2007. u 14:49 - pre 209 meseci
Hvala na ovom odgovoru.Nisam sada pri Borlandu ali sam siguran da ce raditi...Ako bude nekih problema post-ovacu ovdje.Ne znam kako se nisam sjetio za destruktor...Al dobro....
Hvala jos jednom...
 
Odgovor na temu

[es] :: C/C++ programiranje :: Code poslije Application->Terminate()

[ Pregleda: 2598 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.