sandrila logo Sandrila Ltd
Delphi Code

The published methods of adding menus to Visio are very well if only one add-on will be active at any one time. However, this may not be the case. There are many Visio add-ons that cause problems.

procedure add_menus();
var
  UIObj: Visio_TLB.UIObject;
  menusObj: Visio_TLB.Menus;
  menuObj:  Visio_TLB.Menu;
  menuItemObj, subMenuItemObj: Visio_TLB.MenuItem;
begin
 try
  // wait for any startup dialogs to finish
  ready := false;
  while (ready = false) do
  begin
    try
      // if the builtin menu is unavailable then Visio must be busy
      if Visio_Controller.Application.BuiltInMenus <> nil then
        ready := true;
      // Let Visio do its stuff
      Forms.Application.ProcessMessages;
    except;
    end;
  end;
  try
    // always try to get the custom menus first
    UIObj := Visio_Controller.Application.CustomMenus;
    // if the custom menu is empty then get the built in menu
    if UIObj = nil then
      UIObj := Visio_Controller.Application.BuiltInMenus;
  except
    UIObj := Visio_Controller.Application.BuiltInMenus;
  end;
  menusObj := UIObj.MenuSets.ItemAtID[visUIObjSetDrawing].Menus;
  // add our menu at position 8
  menuObj := menusObj.AddAt(8);
  menuObj.Caption := 'YourMenuName';

  // menu item 1
  menuItemObj := menuObj.MenuItems.Add;
  menuItemObj.Caption := 'item 1';
  menuItemObj.AddOnName := 'item1addon';
  menuItemObj.ActionText := 'item 1';
  menuItemObj.MiniHelp := 'item 1';

  // menu item 2
  menuItemObj := menuObj.MenuItems.Add;
  menuItemObj.Caption := 'newSubmenuItems';
  menuItemObj.AddOnName := 'submenuitem1addon';  // any one to make menu visible
  menuItemObj.ActionText := 'newSubmenuItems';
  menuItemObj.MiniHelp := 'newSubmenuItems';

  // submenu item 1
  subMenuItemObj := menuItemObj.MenuItems.Add;
  subMenuItemObj.Caption := 'submenuitem1';
  subMenuItemObj.AddOnName := 'submenuitem1addon';
  subMenuItemObj.ActionText := 'submenuitem1';
  subMenuItemObj.MiniHelp := 'submenuitem1';

  // submenu item 2
  subMenuItemObj := menuItemObj.MenuItems.Add;
  subMenuItemObj.Caption := 'submenuitem2';
  subMenuItemObj.AddOnName := 'submenuitem1addon';
  subMenuItemObj.ActionText := 'submenuitem2';
  subMenuItemObj.MiniHelp := 'submenuitem2';

  // menu item 3
  menuItemObj := menuObj.MenuItems.Add;
  menuItemObj.Caption := 'item 3';
  menuItemObj.AddOnName := 'item1addon';
  menuItemObj.ActionText := 'item 3';
  menuItemObj.MiniHelp := 'item 3';

  // write this to the custom menu
  Visio_Controller.Application.SetCustomMenus(UIObj);
 except;
 end;
end;


Home