|
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.
- Some add-ons (as well as Visio itself) may display a startup dialog, if this dialog is modal then while this is being shown the menus can not be accessed.
- If more than one add is to be loaded it is indeterminate which one will get access to the menus first.
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