Handling the OnPopup Event

From RAD Studio
Jump to: navigation, search

Go Up to Working with Text in Controls

You may want to adjust pop-up menu items before displaying the menu, just as you may want to enable or disable items on a regular menu. With a regular menu, you can handle the OnClick event for the item at the top of the menu.

With a pop-up menu, however, there is no top-level menu bar, so to prepare the pop-up menu commands, you handle the event in the menu component itself. The pop-up menu component provides an event just for this purpose, called OnPopup.

To adjust menu items on a pop-up menu before displaying them

  1. Select the pop-up menu component.
  2. Attach an event handler to its OnPopup event.
  3. Write code in the event handler to enable, disable, hide, or show menu items.

In the following code, the Edit1Click event handler described previously in Disabling Menu Items is attached to the pop-up menu component's OnPopup event. A line of code is added to Edit1Click for each item in the pop-up menu.

 procedure TEditForm.Edit1Click(Sender: TObject);
 var
   HasSelection: Boolean;
 begin
   Paste1.Enabled := Clipboard.HasFormat(CF_TEXT);
   Paste2.Enabled := Paste1.Enabled;{Add this line}
   HasSelection := Editor.SelLength <> 0;
   Cut1.Enabled := HasSelection;
   Cut2.Enabled := HasSelection;{Add this line}
   Copy1.Enabled := HasSelection;
   Copy2.Enabled := HasSelection;{Add this line}
   Delete1.Enabled := HasSelection;
 end;
void __fastcall TMainForm::EditEditClick(TObject *Sender) {
	// enable or disable the Paste menu item
	Paste1->Enabled = Clipboard()->HasFormat(CF_TEXT);
	Paste2->Enabled = Paste1->Enabled; // add this line
	bool HasSelection = (RichEdit1->SelLength > 0); // true if text is selected
	Cut1->Enabled = HasSelection; // enable menu items if HasSelection is true
	Cut2->Enabled = HasSelection; // add this line
	Copy1->Enabled = HasSelection;
	Copy2->Enabled = HasSelection; // add this line
	Delete1->Enabled = HasSelection;
}

See Also