There is a TRY .... FINALLY .. END.
in the control's code before it calls the OnClick event.
So while you are within this OnClick Event the calling code is currently somewhere in the TRY section.
After the OnClick returns, it then pops up the dialog before it reaches the FINALLY section.
However, if you use ABORT, the code will return at that point starting at the Finally section and all other finally sections before that.
Thus it skips the part where it starts the Dialog and free's everything needed in the Finally section.
This means, the code needs to test for a Free and NIL for the internal dialog and do nothing for the external dialog.