Anulowanie Application.Terminate;

0

Zwykle wykonanie Application.Terminate; rozpoczyna proces zamykania naszego programu.
Czy da się powstrzymać wykonywanie tego polecenia?

Oto przykładowy kod: Mamy dwa okna Form1 i Form2 z okna Form1 poprzez Button1 otwieramy
jako okno modalne Form2 a w nim przyciskiem Button aktywujemy Application.Terminate co powoduje
w pierwszej kolejności zamykanie okna Form2. Wtedy wykonywanie programu powraca za polecenie
Form2.ShowModal i tu potrzebny jest mi kod ,który powstrzyma dalsze wykonywanie Application.Terminate
Czy jest możliwe uzyskanie takiego efektu?

Zamieściłem prosty przykład dla tego problemu jednak finalnie chodzi o powstrzymanie tego polecenia
umieszczonego na końcu kilkunastu sekcji krytycznych programu.

///////////////////////////////////////  Form1

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
     repeat

          Form2.ShowModal;

          //Tutaj coś co anuluje wywolanie Application.Terminate wykonane w oknie Form2  ?????????????????????????

     until False;
end;

end.



/////////////////////////////////////////////Form2

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
     Application.Terminate;
end;

end.



 
0

Nie wiem czy dobrze myślę, ale próbujesz zamknąć okno Form2 poleceniem Application.Terminate, a to polecenie zamyka Ci całą aplikację?

Okno Form2 wyświetlone modalnie możesz zamknąć poleceniem:

PostMessage(Self.Handle,wm_close,0,0);
0
0DFh napisał(a)

Nie wiem czy dobrze myślę, ale próbujesz zamknąć okno Form2 poleceniem Application.Terminate, a to polecenie zamyka Ci całą aplikację?

Jeżeli faktycznie chodzi mu o samo zamknięcie formularza to można skorzystać ze zwykłej metody Close() lub jeśli potrzebuje zwrócić jakąkolwiek wartość modalną (bo przecież wywołuje formularz modalnie) to wtedy trzeba użyć np. ModalResult := mrCancel i okno zostanie automatycznie zamknięte;

@tester_68k - Application.Terminate() służy do natychmiastowego przerwania działania aplikacji (całej aplikacji), a nie do zamykania poszczególnych formularzy;

Napisz czy o to Ci chodzi, czy o coś innego;

0

Nie chodzi o okna ( kod z oknami to tylko wizualny przykład problemu) chce powstrzymać dalszy proces zamykania aplikacji w miejscu jakie opisałem w przykładowym kodzie z oknami.

0

nie da się go zatrzymać w tym miejscu. Możesz zarejestrować procedurę wywoływaną przy kończeniu aplikacji przez Application.Terminate ale zostanie ona wywołana AUTOMATYCZNIE. Jak masz napisane wyżej

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