Application.Terminate
działa dobrze. Należy jednak pamiętać, że jest to terminacja opóźniona, wszystko co robi, to wysłanie wiadomości o następującej treści: WM_QUIT
do kolejki komunikatów wątku wywołującego, więc aplikacja nie zostanie faktycznie zakończona, dopóki nie zostanie wywołana Application.Run()
, aby rozpocząć przetwarzanie kolejki komunikatów głównego wątku. Z tego powodu na chwilę może pojawić się migotanie MainForm na ekranie, zanim aplikacja zostanie faktycznie zakończona. Jeśli chcesz tego uniknąć, można ustawić właściwość Application.ShowMainForm
false, np:
procedure TMainForm.FormCreate(Sender: TObject);
begin
if (some condition) then
begin
Application.ShowMainForm := False;
Application.Terminate;
end;
end;
Jednakże, jak inni stwierdzili, lepsza konstrukcja jest zrobić czek w pliku DPR projektu zamiast a nawet tworzyć MainForm w razie potrzeby, np.:
Application.Initialize;
if not (some condition) then
begin
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end;
'Aplikacja.Terminate' na pewno działa. Ale lepiej może napisać swój kod w pliku .DPR, a nie w procedurze obsługi zdarzeń "OnCreate" w głównym formularzu ... –
Sprawdź warunki przed utworzeniem formularza. Jeśli potrzebujesz dość, możesz pominąć kod .dpr, który tworzy formularze i wywołuje 'Application.Run'. Na przykład możesz wywołać 'exit' w treści twojego pliku .dpr. –
@AndreasRejbrand - właśnie to robię :) Chcę zapytać, jak zakończyć to wydarzenie wewnątrz zdarzenia OnCreate. – RBA