[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]
{
> Can you add menu items to the standard popup menu of a form?
>
> I want to do the same thing that Borland did for their PageControl
> component. If you right-click on the Page Control, you get the same std
> menu but with a couple of new items inserted at the top (e.g. New Page).
>
> I remember reading a post asking about how to create menus at runtime.
> I don't think it was answered through the newsgroup, so...
> How do you create menus at runtime?
>
Do you mean add things to the right click menu when designing? Or create a popup
when the program is running?
When running simply create a TPopupMenu and assign it to the PopupMenu property.
This can either be done at design-time or run-time. It won't show at design time
however, since that menu is the form designers.
To add items to the context menu that is shown at design-time, you need to create
a new component editor for your component.
You'll need to override GetVerbCount to return the number of items you want to
add to the menu, and GetVerb to actually fill the list of items. You'll also
need to override ExecuteVerb to actually do the actions.
For example:
}
TMyEditor = class(TComponentEditor)
public
function GetVerbCount : Integer; override;
function GetVerb(Index : Integer); override;
procedure ExecuteVerb(Index : Integer); override;\
end;
function TMyEditor.GetVerbCount : Integer;
begin
Result := 2;
end;
function TMyEditor.GetVerb(Index : Integer);
begin
case Index of
0 : Result := 'Say Hi';
1 : Result := 'Say Bye';
end;
end;
procedure TMyEditor.ExecuteVerb(Index : Integer);
var
MyMsg : String;
begin
case Index of
0 : MyMsg := 'Hi';
1 : MyMsg := 'Bye;
end;
MessageDlg(MyMsg,mtInformation,[mbOK],0);
end;
You'll also need to register the component editor in the Register proc for the
component.
procedure Register;
begin
RegisterComponents('My Component Page',[TMyComponent]);
RegisterComponentEditor(TMyComponent,TMyEditor);
end;
[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]