Archive for the ‘messagebox’ category

Change button texts on message dialog

May 17, 2007

Today customer wanted me to change the typical ‘OK’/’Cancel’ on one of the message dialogs in our app. While browsing through Delphi help and Windows SDK I came up with the idea to use CreateMessageDialog() function:

CreateMessageDialog returns a dialog of the type specified by the DlgType parameter and with the buttons indicated by the Buttons parameter.

Note the … returns a dialog … part here: I now have control over the TForm the function produces and all I have to do, is change captions on the TButton components on this form:

  i: integer;

  with CreateMessageDialog(
    'Do You want to do something destructive today?',
    [mbYes, mbNo]) do try
    // go through all the components on the form
    for i := 0 to ComponentCount - 1 do
      // if we have a button ...
      if Components[i] is TButton then
        // it's the 'Yes' button
        if TButton(Components[i]).ModalResult = 
          mrYes then
          TButton(Components[i]).Caption := 'Yeah!'
        else // otherwise it's the 'No' button
          TButton(Components[i]).Caption := 'Nope';
    // CreateMessageDialog() onlt creates the form
    if ShowModal() = mrYes then



Of course, You can use other combination of buttons (eg. mbYesNoCancel) when creating the dialog and the appropriate modal results when changing captions before showing it to user.

Here’s the result of the code snippet above:

Messagebox with changed button texts

MessageDlg change default button

February 14, 2007

How about creating a message box with the typical Yes-No buttons, but we want to:

  1. keep the order of buttons as it’s done everywhere;
  2. do not want to change the question so Yes becomes No and vice versa;
  3. wanna make the No button as the default button for users who keep pressing Enter/Space for every question asked.

Even though Delphi 7’s helpfile shows that we can set a default button in a message dialog when using MessageDlg() function

function MessageDlg(const Msg: WideString; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint; DefaultBtn: TMsgDlgBtn = mbNone; Bitmap: TBitmap = nil): Integer; overload;

and there’s even an example which uses it

if MessageDlg(‘Welcome to my Delphi application. Exit now?’,
mtConfirmation, [mbYes, mbNo], 0, mbYes) = mrYes then

but it turns out that these overloaded methods are implemented in QDialogs and not in Dialogs.

Easiest way to solve my problem was to use TApplication.MessageBox() method:

Use MessageBox to display a generic dialog box a message and one or more buttons.

And the code is something like:

if Application.MessageBox(
  PChar('Do You want to do something destructive today?'),

Messagebox default button