RAD Studio VCL Reference
|
Occurs when the user clicks menu item.
property OnClick: TNotifyEvent;
__property TNotifyEvent OnClick;
Write an OnClick event handler to implement the desired behavior for when the user selects the menu item. An advantage of using the OnClick event handler over directly handling WM_COMMAND messages sent when the user selects the menu item, is that only the OnClick event occurs when the Click method is called.
C++ Examples:
/* This example uses several forms. The first form has its FormStyle property set to MDIForm. The others have their FormStyle properties set to MDIChild and their Visible properties set to true. Add a main menu component and name one of the menu items MyArrangeIcons. This is code for the MyArrangeIconsClick handler. When the user chooses the ArrangeIcons command, minimized child forms are arranged so that they are evenly spaced and don't overlap. DO NOT name the menu items "ArrangeIcons" as that will override the TForm method. */ void __fastcall TForm1::MyArrangeIconsClick(TObject *Sender) { Form1->ArrangeIcons(); }
/* This example uses two edit boxes and one pop-up menu on a form. The pop-up menu contains Cut, Copy, and Paste commands. This code makes the pop-up menu available to both edit boxes: */ void __fastcall TForm1::FormCreate(TObject *Sender) { PopupMenu1->AutoPopup = true; Edit1->PopupMenu = PopupMenu1; Edit2->PopupMenu = PopupMenu1; } /* These are the cut, copy, and paste OnClick events for the commands on the pop-up menu. Double click on the pop-up menu and add three TMenuItems. Then set the captions to "Cut", "Copy" and "Paste". The names will be automatically set to "Cut1", "Copy1", and "Paste1". Then double click on the OnClick events and they will be named "Cut1Click", "Copy1Click" and "Paste1Click" respectively. Note: only the selected portion of the string in the edit box will be copied, cut or replaced. */ void __fastcall TForm1::Copy1Click(TObject *Sender) { TComponent *pComponent = PopupMenu1->PopupComponent; if (pComponent) { if (pComponent->ClassNameIs("TEdit")) (dynamic_cast<TEdit *>(pComponent))->CopyToClipboard(); else MessageBeep(0); } else MessageBeep(0); } void __fastcall TForm1::Cut1Click(TObject *Sender) { TComponent *pComponent = PopupMenu1->PopupComponent; if (pComponent) { if (pComponent->ClassNameIs("TEdit")) (dynamic_cast<TEdit *>(pComponent))->CutToClipboard(); else MessageBeep(0); } else MessageBeep(0); } void __fastcall TForm1::Paste1Click(TObject *Sender) { TComponent *pComponent = PopupMenu1->PopupComponent; if (pComponent) { if (pComponent->ClassNameIs("TEdit")) (dynamic_cast<TEdit *>(pComponent))->PasteFromClipboard(); else MessageBeep(0); } else MessageBeep(0); }
/* This example demonstrates how to add and delete menu items to a popup menu at runtime and assign an event handler to the OnClick event. Place a TPopupMenu and three buttons on the form named "AddButton", "EditButton", and "DestroyButton" and add OnClick events to all three buttons. Put the TPopupMenu in the PopupMenu property of the form. Place the PopupMenuItemsClick procedure in the TForm1 type declaration so that it can be used as the method call for the menu item OnClick event. */ void __fastcall TForm1::AddButtonClick(TObject *Sender) { // The owner (PopupMenu1) will cleanup this menu item. TMenuItem *NewItem = new TMenuItem(PopupMenu1); // create the new item int index = PopupMenu1->Items->Count; PopupMenu1->Items->Add(NewItem);// add it to the Popupmenu NewItem->Caption = "Menu Item " + IntToStr(index); NewItem->Tag = index; NewItem->OnClick = PopupMenuItemsClick;// assign it an event handler TNotifyEvent(); } void __fastcall TForm1::PopupMenuItemsClick(TObject *Sender) { TMenuItem *ClickedItem = dynamic_cast<TMenuItem *>(Sender); if (ClickedItem) { switch (ClickedItem->Tag) { case 0: { ShowMessage("first item clicked"); break; } case 1: { ShowMessage("second item clicked"); break; } case 2: { ShowMessage("third item clicked"); break; } case 3: { ShowMessage("fourth item clicked"); break; } } } } /* To edit or destroy an item, grab its pointer via the Items property. */ void __fastcall TForm1::EditButtonClick(TObject *Sender) { const int index = 1; TMenuItem *ItemToEdit = PopupMenu->Items->Items[index]; ItemToEdit->Caption = "Changed Caption"; } void __fastcall TForm1::DestroyButtonClick(TObject *Sender) { const int index = 2; TMenuItem *ItemToDelete = PopupMenu->Items->Items[index]; delete ItemToDelete; } void __fastcall TForm1::FormCreate(TObject *Sender) { const int num_items = 4; for (int index = 0; index < num_items; ++index) { // The owner (PopupMenu1) will cleanup this menu item. TMenuItem *NewItem = new TMenuItem(PopupMenu1); // create the new item PopupMenu1->Items->Add(NewItem);// add it to the Popupmenu NewItem->Caption = "Menu Item " + IntToStr(index); NewItem->Tag = index; NewItem->OnClick = PopupMenuItemsClick;// assign it an event handler TNotifyEvent(); } }
Delphi Examples:
{ This example uses several forms. The first form has its FormStyle property set to MDIForm. The others have their FormStyle properties set to MDIChild and their Visible properties set to true. Add a main menu component and name one of the menu items MyArrangeIcons. This is code for the MyArrangeIconsClick handler. When the user chooses the ArrangeIcons command, minimized child forms are arranged so that they are evenly spaced and don't overlap. DO NOT name the menu items "ArrangeIcons" as that will override the TForm method. } procedure TForm1.MyArrangeIconsClick(Sender: TObject); begin Form1.ArrangeIcons; end;
{ This example uses two edit boxes and one pop-up menu on a form. The pop-up menu contains Cut, Copy, and Paste commands. This code makes the pop-up menu available to both edit boxes: } procedure TForm1.FormCreate(Sender: TObject); begin PopupMenu1.AutoPopup := True; Edit1.PopupMenu := PopupMenu1; Edit2.PopupMenu := PopupMenu1; end; { These are the cut, copy, and paste OnClick events for the commands on the pop-up menu. Double click on the pop-up menu and add three TMenuItems. Then set the captions to "Cut", "Copy" and "Paste". The names will be automatically set to "Cut1", "Copy1", and "Paste1". Then double click on the OnClick events and they will be named "Cut1Click", "Copy1Click" and "Paste1Click" respectively. Note: only the selected portion of the string in the edit box will be copied, cut or replaced. } procedure TForm1.Copy1Click(Sender: TObject); begin if PopupMenu1.PopupComponent = Edit1 then Edit1.CopyToClipboard else if PopupMenu1.PopupComponent = Edit2 then Edit2.CopyToClipboard else Beep; end; procedure TForm1.Cut1Click(Sender: TObject); begin if PopupMenu1.PopupComponent = Edit1 then Edit1.CutToClipboard else if PopupMenu1.PopupComponent = Edit2 then Edit2.CutToClipboard else Beep; end; procedure TForm1.Paste1Click(Sender: TObject); begin if PopupMenu1.PopupComponent = Edit1 then Edit1.PasteFromClipboard else if PopupMenu1.PopupComponent = Edit2 then Edit2.PasteFromClipboard else Beep; end;
{ This example demonstrates how to add and delete menu items to a popup menu at runtime and assign an event handler to the OnClick event. Place a TPopupMenu and three buttons on the form named "AddButton", "EditButton", and "DestroyButton" and add OnClick events to all three buttons. Put the TPopupMenu in the PopupMenu property of the form. Place the PopupMenuItemsClick procedure in the TForm1 type declaration so that it can be used as the method call for the menu item OnClick event. } type TForm1 = class(TForm) AddButton: TButton; EditButton: TButton; DestroyButton: TButton; PopupMenu1: TPopupMenu; procedure AddButtonClick(Sender: TObject); procedure EditButtonClick(Sender: TObject); procedure DestroyButtonClick(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public procedure PopupMenuItemsClick(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.AddButtonClick(Sender: TObject); var index: Integer; NewItem: TMenuItem; begin // The owner (PopupMenu1) will cleanup this menu item. NewItem := TMenuItem.Create(PopupMenu1); // create the new item index := PopupMenu1.Items.Count; PopupMenu1.Items.Add(NewItem);// add it to the Popupmenu NewItem.Caption := 'Menu Item ' + IntToStr(index); NewItem.Tag := index; NewItem.OnClick := PopupMenuItemsClick; // assign it an event handler end; procedure TForm1.PopupMenuItemsClick(Sender: TObject); begin with Sender as TMenuItem do begin case Tag of 0: ShowMessage('first item clicked'); 1: ShowMessage('second item clicked'); 2: ShowMessage('third item clicked'); 3: ShowMessage('fourth item clicked'); end; end; end; { To edit or destroy an item, grab its pointer via the Items property. } procedure TForm1.EditButtonClick(Sender: TObject); var ItemToEdit: TMenuItem; begin ItemToEdit := PopupMenu.Items[1]; ItemToEdit.Caption := 'Changed Caption'; end; procedure TForm1.DestroyButtonClick(Sender: TObject); var ItemToDelete: TMenuItem; begin ItemToDelete := PopupMenu.Items[2]; ItemToDelete.Free; end; procedure TForm1.FormCreate(Sender: TObject); var index: Integer; NewItem: TMenuItem; begin for index := 0 to 3 do begin // The owner (PopupMenu1) will cleanup this menu item. NewItem := TMenuItem.Create(PopupMenu1); // create the new item PopupMenu1.Items.Add(NewItem);// add it to the Popupmenu NewItem.Caption := 'Menu Item ' + IntToStr(index); NewItem.Tag := index; NewItem.OnClick := PopupMenuItemsClick; // assign it an event handler end; end;
Copyright(C) 2009 Embarcadero Technologies, Inc. All Rights Reserved.
|
What do you think about this topic? Send feedback!
|