Hi all,

While investigating issue #19863 in the bugtracker
(http://bugs.freepascal.org/view.php?id=19863) I stumbled upon this.

If you have a MessageDlg (without a mrCancel button) and you click the
"Close" border-icon of the dialog then the result now depends on your
OS (on Windows that is)

On Windows Vista (and up) the result will be "EscapeResult" (user
presses Escape key: the result depends on the actual buttons in the
dialog: it will be mrNo if you have [mbYes,mbNo] as buttons).
On lower Windows versions it will be mrCancel always.

The cause lies in the WidgetSet.PromptUser() function:

In WidgetSet.PromptUser we do not correct for CancelValue

...
  if PromptDialogFunction <> nil then
    Result := PromptDialogFunction(DialogCaption, DialogMessage, DialogType,
       Buttons, ButtonCount, DefaultIndex, EscapeResult, True, 0, 0)


in TWin32WidgetSet.PromptUser we do correct for it:
...
      Result := IDCANCEL;
      TaskDialogIndirect(@TaskConfig, @Result, nil, nil);
      if Result = IDCANCEL then
        Result := EscapeResult;

To me it makes more sense that pressing Escape key and clicking the
"Close" border-icon will give the same result.


At least we should make it behave consistently.

Any opinions on how we want it to behave (or how it "must" behave)?

Bart

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

Reply via email to