[Lazarus] try..except doesn't trap exception in Form.Showmodal

Michael Van Canneyt michael at freepascal.org
Fri Dec 13 15:51:51 CET 2019



On Fri, 13 Dec 2019, Luca Olivetti via lazarus wrote:

>> At least, that is how I see it. Not 100% accurate, but it does the trick 
>> for my understanding ;-)
>
> Yes, I know all of that, but the message loop could also fake re-raising 
> the exception if it was raised in the context of a ShowModal (though I 
> reckon that if it did that it would probably break existing 
> applications, or maybe not, since the exception would be finally caught 
> by the application handler anyway).

Not correct.

I have code
   if ShowModal=mrOK then
     begin
     end
   else
    begin
    end
No matter how many exceptions are raised, the code will always go through
either block of the if then statement.

If ShowModal would propagate this, then neither of the  code blocks would be
executed.

So changing this is a no-no.


>
> BTW, is there a way to know where the exception came from? I don't see 
> any method in Exception to do that, and that's the only parameter that 
> OnException sees (Sender is nil when I raise an exception inside a form).
> My use case is, I want to manage only the exceptions generated in a 
> specific form while I'm modal showing it.
> I usually set a field telling me that the form is visible and use that 
> in OnException to guess where it came from, but that will obviously fail 
> if the form is showing and there's an exception generated somewhere else.

Why not use Screen.ActiveForm ?

Michael.


More information about the lazarus mailing list