Steve Gatenby schrieb:
Hoping somebody may be able to explain why the following doesn't stop the Form closing.

Button1 sets the method pointer correctly (I believe), as when closing the form the showmessage occurs as expected (and shows the correct form name).
But the form closes anyway.

procedure MyFormCloseQuery(Sender: TObject; var CanClose: boolean);
begin
  ShowMessage('MyCloseQuery:'+TControl(Sender).Name);
  CanClose := FALSE;
end;

procedure TformMain.Button1Click(Sender: TObject);
var
  OnCloseQueryMethod            :TCloseQueryEvent;

begin
  TMethod(OnCloseQueryMethod).Code := @MyFormCloseQuery;
  TMethod(OnCloseQueryMethod).Data := formMain;
  TForm(formMain).OnCloseQuery     := OnCloseQueryMethod;
end;

Here formMain.OnCloseQuery := @MyFormCloseQuery should be sufficient, unless the OnCloseQuery handler deals with data in the form. But in this case the handler should be made part of the formMain code, so that it can access the form's fields and methods.

When your formMain closes anyway, I'd suggest to write an OnClose handler and set CloseAction to caNone there.

AFAIR OnCloseQuery is intended for ending an application, where the application denies ending when any form reports CanClose=False. Closing individual forms instead should be handled in OnClose.

DoDi


--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to