RAD Studio |  |

Disabling Menu Items
See Also
Collapse All

It is often useful to disable menu commands without removing them from the menu. For example, in a text editor, if there is no text currently selected, the Cut, Copy, and Delete commands are inapplicable. An appropriate time to enable or disable menu items is when the user selects the menu. To disable a menu item, set its Enabled property to False.

In the following example, an event handler is attached to the OnClick event for the Edit item on a child form's menu bar. It sets Enabled for the Cut, Copy, and Delete menu items on the Edit menu based on whether RichEdit1 has selected text. The Paste command is enabled or disabled based on whether any text exists on the clipboard.

Copy Code

    procedure TEditForm.Edit1Click(Sender: TObject);
    var
      HasSelection: Boolean;  { declare a temporary variable }
    begin
      Paste1.Enabled := Clipboard.HasFormat(CF_TEXT);  {enable or disable the Paste                                                menu item}
      HasSelection := Editor.SelLength > 0;  { True if text is selected }
      Cut1.Enabled := HasSelection;  { enable menu items if HasSelection is True }
      Copy1.Enabled := HasSelection;
      Delete1.Enabled := HasSelection;
    end;

Copy Code

    void __fastcall TMainForm::EditEditClick(TObject *Sender)
    {
      // enable or disable the Paste menu item
      Paste1->Enabled = Clipboard()->HasFormat(CF_TEXT);
      bool HasSelection = (RichEdit1->SelLength > 0);  // true if text is selected
      Cut1->Enabled = HasSelection;  // enable menu items if HasSelection is true
      Copy1->Enabled = HasSelection;
      Delete1->Enabled = HasSelection;
    }

The HasFormat method of the clipboard returns a Boolean value based on whether the clipboard contains objects, text, or images of a particular format. By calling HasFormat with the parameter CF_TEXT, you can determine whether the clipboard contains any text, and enable or disable the Paste item as appropriate.

See Also

TMenu

Copyright(C) 2009 Embarcadero Technologies, Inc. All Rights Reserved.
What do you think about this topic? Send feedback!