Witajcie :)
Jak przechwycić zamknięcie aplikacji (Alt-F4, klik w X, zamknięcie z menu na pasku zadań), ale w ciele komponentu bez formy? Chciałbym w momencie zamknięcia programu ustawiać pewną flagę przerywającą obieg czasochłonnej pętli działającej w komponencie (bez jej przerywania zamykanie programu trwa długo do czasu zakończenia pętli, czego chciałbym uniknać). Próbowałem użyć mechanizmu przechwytywania Application.OnMessage, a także AllocateHWnd:
type
TMojaKlasa = class(TComponent)
private
fHWnd: HWND;
protected
procedure WndMethod(var Msg: TMessage); virtual;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
implementation
constructor TMojaKlasa.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
fHWnd := AllocateHWnd(WndMethod);
end;
destructor TMojaKlasa.Destroy;
begin
DeallocateHWnd(fHWnd);
inherited Destroy;
end;
procedure TMojaKlasa.WndMethod(var Msg : TMessage);
begin
If Msg.Msg={WM_QUIT ?? WM_SYSCOMMAND ??} then MojaFlaga:=true;
Msg.Result:=DefWindowProc(fHWnd, Msg.Msg, Msg.WParam, Msg.LParam);
end;
ale nie reagują przy zamknięciu programu.
Proszę o dobrą radę:)
Pzdr.
Marogo