[Lazarus] Inconsistent results from MessageDlg()

patspiper patspiper at gmail.com
Fri Apr 27 11:59:55 CEST 2012


On 26/04/12 19:40, Bart wrote:
> On 4/25/12, patspiper<patspiper at gmail.com>  wrote:
>
>> As for TBitBtn, I suggest Lazarus respects the button's modalresult and
>> acts accordingly.
>>
> By default a Button with ModalResult = mrNone will not close it's
> parentform when clicked.
> A TBitBtn with Kind = bkClose and ModalResult is the exception to this rule.
> It should close the parentform, not setting it's ModalResult (which
> will result in ModalResult of parentform being mrCancel).
>
> A TBitBtn with ModalResult<>  mrNone should always set parentform's
> ModalResult (regardless of Kind), which is what my patch does.
To summarize, your target is:

1- TBitButton:

a- TBitButton with ModalResult<>mrNone: Its ModalResult will act 
normally (close form and set its ModalResult to the BitButton's 
ModalResult).

b- TBitButton with Kind<>bkClose and ModalResult=mrNone: Does nothing.

c- TBitButton with Kind=bkClose and ModalResult=mrNone: Close form and 
set its ModalResult to mrCancel.


2- Native PromptUser():

a- Escape and [x] close the dialog and return mrCancel


3- LCL's CreateMessageDialog():

a- [x] closes the dialog and return mrCancel

b- Escape closes the dialog and returns mrCancel, mrNo, or mrOK if and 
only if one of mbCancel, mbNo, and mbOk is present repectively and in 
that order of precedence. Otherwise, Escape key does not have any effect.


IMHO:

- 1a and 1b are intuitive whereas 1c is not, irrespective of the 
different Delphi versions implementations. If one wants to close the 
form and return mrCancel, he should set the BitButton's ModalResult to 
mrCancel. I can't see why he would set it as mrNone and expect it to act 
as mrCancel.

- 2a is logical

- 3a is logical and is in accordance with 2a

- 3b deviates from 2a (I would assume native and LCL's dialogs should 
behave the same). Furthermore, I wonder how mbAbort is excluded. The 
current behaviour of MessageDlg under gtk2 is as described below. I 
suggest this is considered for the Escape key.
-------------------------------
Escape and [x] border icon are equivalent and always return the same 
modal result. They will return the following in high to low order of 
preference (assuming the corresponding button is present):
mrCancel
mrNo
mrAbort
mrIgnore
mrNoToAll
mrYes
mrOK
mrRetry
mrAll
mrYesToAll

If the only button in MessageDlg is mbClose, then Escape or [x] will 
return mrCancel. This corresponds exactly to what the ModalEscapeValue 
function does.
-------------------------------

Stephano




More information about the Lazarus mailing list