RAD Studio
Disabling Menu Items

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.

procedure TEditForm.Edit1Click(Sender: TObject);
  HasSelection: Boolean;  { declare a temporary variable }
  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;


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.

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