Question
“How can I customize the menu and toolbars?”
Solution
The following example shows how to acess the menus and toolbars to add/remove items, hide toolbars, and assign custom event-handlers.
Download: DesignerCustomizeMenusAndToolbars.zip
Sample Delphi code:
uses ppTBX, ppToolbarTBX, ppDesignLayoutManager, ppDesignLayoutMenu, ppDesignToolManagerTBX, ppDesignToolbarsTBX, ppDesignToolActions, ActnList; {****************************************************************************** Example: hide File | Print menu item ******************************************************************************} procedure TForm1.btnHideFilePrintClick(Sender: TObject); var lMenuBar: TppMenuBar; { lFileMenu: TppTBCustomItem;} lDesignerMenu: TppDesignerMenu; begin // each notebook page can have a menu bar, this returns the menu bar for the // active notebook page lMenuBar := ppDesigner1.Form.MainMenu; // one approach is to get the menu item and then index into its items { lFileMenu :=lMenuBar.Items[0]; } // an easier way is to type cast to TppDesignerMenu, which has properties // corresponding to each menu item if (lMenuBar is TppDesignerMenu) then begin lDesignerMenu := TppDesignerMenu(lMenuBar); lDesignerMenu.FileMenu.Print.Visible := False; end; end; {****************************************************************************** Example: add File | Hello menu item ******************************************************************************} procedure TForm1.btnAddFileHelloItemClick(Sender: TObject); var lMenuBar: TppMenuBar; { lFileMenu: TppTBCustomItem; } lDesignerMenu: TppDesignerMenu; lItem: TppTBXItem; liIndex: Integer; begin // each notebook page can have a menu bar, this returns the menu bar for the // active notebook page lMenuBar := ppDesigner1.Form.MainMenu; // one way is to get the menu item { lFileMenu :=lMenuBar.Items[0];} // an easier way is to type cast to TppDesignerMenu, which has properties // corresponding to each menu item if (lMenuBar is TppDesignerMenu) then begin lDesignerMenu := TppDesignerMenu(lMenuBar); // get index of File | Print item liIndex := lDesignerMenu.FileMenu.IndexOf(lDesignerMenu.FileMenu.Print); Inc(liIndex); lItem := TppTBXItem.Create(nil); // create a menu item lItem.Caption := '*** Hello ***'; lItem.OnClick := ehFileHello_Click; lDesignerMenu.FileMenu.Insert(liIndex, lItem); // insert menu item // lDesignerMenu.FileMenu.AddSeparator; // add separator { lItem := lDesignerMenu.FileMenu.AddChildItem;} // add menu item // lItem.Caption := 'Hello'; end; end; procedure TForm1.ehFileHello_Click(Sender: TObject); begin ShowMessage('Hello menu item clicked'); end; {****************************************************************************** Example: hide Toolbar Print button ******************************************************************************} procedure TForm1.btnHideToolbarPrintButtonClick(Sender: TObject); var lLayoutManager: TppDesignLayoutManager; lToolActionManager: TppDesignToolActionManager; lAction: TContainedAction; begin lLayoutManager := ppDesigner1.Form.LayoutManager; // the Layout (i.e. Design workspace) toolbars use the Delphi Action architecture // (except for the component palette toolbars). // the ActionManager, contains properties such as StandardActions, AlignActions, etc. // each of the properties is an ActionList that is implemented by one of the toolbars lToolActionManager := lLayoutManager.ToolActionManager; // the Standard Actions list contains the Print Action lAction := lToolActionManager.StandardActions.GetActionForName('Print'); // set action visible to false TCustomAction(lAction).Visible := False; end; {****************************************************************************** Example: assign PrintPreview tool button event-handler ******************************************************************************} procedure TForm1.btnToolbarButtonEventHandlerClick(Sender: TObject); var lLayoutManager: TppDesignLayoutManager; lToolManager: TppDesignToolManager; lToolbar: TppToolbar; lStdToolbar: TppStandardToolbar; begin lLayoutManager := ppDesigner1.Form.LayoutManager; // get the toolmanager lToolManager := lLayoutManager.ToolManager; // use the ToolBars[] array to access the standard toolbar lToolbar := lToolManager.Toolbars.ItemsByName['Standard']; if (lToolbar = nil) then ShowMessage('Standard toolbar not found') else begin //typecast lStdToolbar := TppStandardToolbar(lToolbar); // assign button event-handler lStdToolbar.PrintPreviewButton.OnClick := ehPrintPreviewButton_Click; // Note: you can also access the Items[] array // lStdToolbar.Items[4].OnClick := ehPrintPreviewButton_Click; end; end; procedure TForm1.ehPrintPreviewButton_Click(Sender: TObject); begin ShowMessage('PreviewButton clicked'); end; {****************************************************************************** Example: Remove the Standard toolbar ******************************************************************************} procedure TForm1.Button2Click(Sender: TObject); var lLayoutManager: TppDesignLayoutManager; lToolManager: TppDesignToolManager; lToolbar: TppToolbar; begin lLayoutManager := ppDesigner1.Form.LayoutManager; // get the toolmanager lToolManager := lLayoutManager.ToolManager; // use the ToolBars[] array to access the standard toolbar lToolbar := lToolManager.Toolbars.ItemsByName['Standard']; // free the toolbar - the tool menu and popupmenu will be updated automatically lToolbar.Free; end;