我成功地在Delphi中使用INTAServices40安装了我的菜单项,但问题是 - 菜单在下次启动时缺少?实际上,安装了两个菜单项。一个在总是显示的帮助菜单下(IOTAWizardMenu),但在工具菜单(测试菜单项)下面的一个在下次启动时缺失。如何解决这个问题?Delphi IDE菜单集成 - INTAServices
unit TESTMENU;
interface
uses
ToolsAPI, Classes, Windows, vcl.Menus, vcl.dialogs;
type
TCustomMenuItem = class(TNotifierObject, IOTAWizard, IOTAMenuWizard)
function GetIDString: string;
function GetName: string;
function GetState: TWizardState;
// Launch the AddIn
procedure Execute;
function GetMenuText: string;
end;
TCustomMenuHandler = class(TObject)
// Handle custom menu
procedure HandleClick(Sender: TObject);
end;
procedure Register;
implementation
var
mnuitem: TMenuItem;
CustomMenuHandler: TCustomMenuHandler;
procedure TCustomMenuItem.Execute;
begin
ShowMessage('IOTAWizardMenu based menu item');
end;
function TCustomMenuItem.GetIDString: string;
begin
Result := 'TMS.MenuSample';
end;
function TCustomMenuItem.GetMenuText: string;
begin
Result := 'IOTAWizardMenu';
end;
function TCustomMenuItem.GetName: string;
begin
Result := 'TMSMenuSample';
end;
function TCustomMenuItem.GetState: TWizardState;
begin
Result := [wsEnabled];
end;
procedure TCustomMenuHandler.HandleClick(Sender: TObject);
begin
ShowMessage('INTAServices40.MainMenu based menu item');
end;
procedure AddIDEMenu;
var
NTAServices: INTAServices40;
begin
NTAServices := BorlandIDEServices as INTAServices40;
// avoid inserting twice
if NTAServices.MainMenu.Items[9].Find('TEST') = nil then
begin
CustomMenuHandler := TCustomMenuHandler.Create;
mnuitem := TMenuItem.Create(nil);
mnuitem.Caption := 'TEST';
mnuitem.OnClick := CustomMenuHandler.HandleClick;
NTAServices.MainMenu.Items[9].Add(mnuitem)
end;
end;
procedure RemoveIDEMenu;
var
NTAServices: INTAServices40;
begin
if Assigned(mnuitem) then
begin
NTAServices := BorlandIDEServices as INTAServices40;
NTAServices.MainMenu.Items[9].Remove(mnuitem);
mnuitem.Free;
if Assigned(CustomMenuHandler) then
CustomMenuHandler.Free;
end;
end;
procedure Register;
begin
AddIDEMenu;
RegisterPackageWizard(TCustomMenuItem.Create);
end;
initialization
mnuitem := nil;
CustomMenuHandler := nil;
finalization
RemoveIDEMenu;
end.
所以,我的第一个问题是菜单项测试每个德尔福开始时展示了如何获得..还有,我想下一个图标添加到菜单项的测试。任何方向?
谢谢
编辑: 我刚刚发现我的包被延迟加载。读互联网的人说应该调用ForceDemandLoadState(dlDisable)。但是,这也不能帮助我......
OTA插件必须实现为被安装到IDE和每个IDE运行时加载的包。假设你确实创建了一个包,你是否验证了该包是否在下一次IDE重启时被加载? –
我没有检查它,它正在加载。问题是 - 即使手动添加包(bpl),菜单项也不会显示。只有当我重新编译包时,菜单项才会显示。 – Tracer
Delphi的哪个版本是这样的? –