Disabling Menu Items

From RAD Studio
Jump to: navigation, search

Go Up to Working with Text in Controls

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);
 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;
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