On 18/04/12 16:22, Martin wrote:
On 18/04/2012 11:53, Hans-Peter Diettrich wrote:
patspiper schrieb:

No, FormClose() isn't called when modal form is hidden via Hide();

Correct

, so form still exists and it can be called with ShowModal() or Show() again.

I beg to differ here as Showmodal should not exit unless the modal form is closed.

A modal form (dialog) can be used to accept multiple user entries (filename...). Then the form object must stay alife until the application has read all entries. That's why a modal form only hides itself on exit.


closed <> destroy

Close() depends on close action, which include free and hide.
Close() on a modal Form in LCL ignores close action and always hides (by setting ModalResult = mrCancel.

Hide() or Visible:=False does not set ModalResult

In fact if in Delphi you hide a modalform, then ShowModal does not return.
Correct
I don't know, if this is intended or accidental behaviour.
It is intended behaviour. Embarcadero docs clearly state:
"ShowModal does not return until the form closes"

Lazarus docs:
"Show this form as modal - ie control cannot be resumed by another form until the current form is closed"
While of course you can use this, there is a real danger of such a modal form become hidden, with no means of ever getting it back or exiting it.
This is fine especially that the same situation arises when the main form is hidden -> no means of ever getting it back or exiting it. It is up to the programmer to decide if he opts to hide it.

Stephano

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

Reply via email to