Zamknięcie aplikacji z obejściem CloseQuery

0

Cześć, mam pewien unit, który będzie dołączany do różnych moich aplikacji.
I teraz mam taki problem. W pewnym momencie w unicie muszę zamknąć aplikację, martwiąc się o to, żeby to, co jest w OnClose głównej formy się wykonało.

Dodatkowy problem jest taki, że niektóre aplikacje będą miały zdarzenie OnCloseQuery, niektóre nie.

Z tego, co myślę to Application.Terminate, ani Halt nie mogę się posłużyć, bo wtedy nie wykona się to, co jest w OnClose.

Application.MainForm.Close; też nie mogę wykonać, bo jeśli będzie OnCloseQuery, to aplikacja się nie zamknie.

Czy jak zamknąć program na chama, ale tak, żeby wykonało się to, co jest w onClose(jeśli w ogóle coś jest?)

Może coś z dyrektywami kompilatora? Ale co?

0
Juhas napisał(a)

Cześć, mam pewien unit, który będzie dołączany do różnych moich aplikacji.
I teraz mam taki problem. W pewnym momencie w unicie muszę zamknąć aplikację, martwiąc się o to, żeby to, co jest w OnClose głównej formy się wykonało.

Dodatkowy problem jest taki, że niektóre aplikacje będą miały zdarzenie OnCloseQuery, niektóre nie.

Z tego, co myślę to Application.Terminate, ani Halt nie mogę się posłużyć, bo wtedy nie wykona się to, co jest w OnClose.

Application.MainForm.Close; też nie mogę wykonać, bo jeśli będzie OnCloseQuery, to aplikacja się nie zamknie.

Czy jak zamknąć program na chama, ale tak, żeby wykonało się to, co jest w onClose(jeśli w ogóle coś jest?)

Może coś z dyrektywami kompilatora? Ale co?

Nie do końca czaje czy ta zamykana aplikacja to Twoja czy jakaś obca.
Jeśli Twoja, to dodaj sobie jakąś zmienną globalną w stylu Zamykanie i sprawdzaj ją w CloseQuery, jeśli będzie True to dajesz CanClose na True.
Jeśli obca, i w "ichniej" OnCloseQuery jest jakiś modal w stylu "Czy zamknąć ?" to więcej zabawy. Trzeba by wysłać komunikat do tej aplikacji, że ma być zamknięta, a potem ... może sprawdzać czy jest tam jakieś okienko, i próbować je z kolei zamknąć.

0
procedure TForm1.btn3Click(Sender: TObject);
var
  Close: TCloseEvent;
  Action: TCloseAction;
begin
  Close := Application.MainForm.OnClose;
  if @Close <> nil then
    Close(nil, Action);
  Application.Terminate;
end;

myśleć panie, myśleć

0

OK, dzięki Misiek, wygląda na to, że śmiga.

1 użytkowników online, w tym zalogowanych: 0, gości: 1