DelphiIDE菜单集成-INTAServices
我使用INTAServices40成功地在Delphi中安装了我的菜单项,但问题是-下次Delphi启动时菜单缺失?!实际上,安装了两个菜单项;帮助菜单下的一个始终显示(IOTAWizardMenu),但工具菜单(测试菜单项)下的一个在下一次Delphi启动时丢失。如何解决这个问题DelphiIDE菜单集成-INTAServices,delphi,components,delphi-xe2,vcl,Delphi,Components,Delphi Xe2,Vcl,我使用INTAServices40成功地在Delphi中安装了我的菜单项,但问题是-下次Delphi启动时菜单缺失?!实际上,安装了两个菜单项;帮助菜单下的一个始终显示(IOTAWizardMenu),但工具菜单(测试菜单项)下的一个在下一次Delphi启动时丢失。如何解决这个问题 unit TESTMENU; interface uses ToolsAPI, Classes, Windows, vcl.Menus, vcl.dialogs; type TCusto
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.
所以,我的第一个问题是如何在每次Delphi启动时显示菜单项测试。。另外,我想在菜单项TEST旁边添加一个图标。有什么方向吗
多谢各位
编辑:
我刚发现我的包裹迟装了。阅读互联网的人说应该称为ForceDemandLoadState(dlDisable)。但是,这对我也没有帮助….
procedure AddIDEMenu;
var
HelpMenu: TComponent;
begin
HelpMenu := Application.MainForm.FindComponent('HelpMenu');
if (HelpMenu is TMenuItem) and (TMenuItem(HelpMenu).Find('TEST') = nil) then
begin
CustomMenuHandler := TCustomMenuHandler.Create;
mnuitem := TMenuItem.Create(nil);
mnuitem.Caption := 'TEST';
mnuitem.OnClick := CustomMenuHandler.HandleClick;
TMenuItem(HelpMenu).Add(mnuitem);
end;
end;
procedure RemoveIDEMenu;
var
HelpMenu: TComponent;
begin
if Assigned(mnuitem) then
begin
HelpMenu := Application.MainForm.FindComponent('HelpMenu');
if HelpMenu is TMenuItem then
TMenuItem(HelpMenu).Remove(mnuitem);
mnuitem.Free;
CustomMenuHandler.Free;
end;
end;
NTAServices.MainMenu.Items[9]
在IDE加载其包时,可能会在不同的时间返回不同的内容,还有一些菜单项的子项在运行时由IDE管理(例如窗口菜单)
您可以按名称查找“帮助”菜单项组件:
procedure AddIDEMenu;
var
HelpMenu: TComponent;
begin
HelpMenu := Application.MainForm.FindComponent('HelpMenu');
if (HelpMenu is TMenuItem) and (TMenuItem(HelpMenu).Find('TEST') = nil) then
begin
CustomMenuHandler := TCustomMenuHandler.Create;
mnuitem := TMenuItem.Create(nil);
mnuitem.Caption := 'TEST';
mnuitem.OnClick := CustomMenuHandler.HandleClick;
TMenuItem(HelpMenu).Add(mnuitem);
end;
end;
procedure RemoveIDEMenu;
var
HelpMenu: TComponent;
begin
if Assigned(mnuitem) then
begin
HelpMenu := Application.MainForm.FindComponent('HelpMenu');
if HelpMenu is TMenuItem then
TMenuItem(HelpMenu).Remove(mnuitem);
mnuitem.Free;
CustomMenuHandler.Free;
end;
end;
OTA插件必须实现为安装到IDE中的包,并在每次运行IDE时加载。假设您确实创建了一个包,您是否验证了该包在下一次IDE重新启动时是否正在加载?我确实检查了它,它正在加载。问题是-即使手动添加包(bpl),菜单项也不会显示。只有当我重新编译软件包时,菜单项才会显示。这是哪个版本的Delphi?OTA插件必须作为软件包安装到IDE中,并在每次运行IDE时加载。假设您确实创建了一个包,您是否验证了该包在下一次IDE重新启动时是否正在加载?我确实检查了它,它正在加载。问题是-即使手动添加包(bpl),菜单项也不会显示。只有当我重新编译软件包时,菜单项才会显示。这是哪个版本的Delphi?这对我不起作用。。。问题是菜单项在下次Delphi启动时不会显示。它对我很有效。试着调试一下,看看你的情况出了什么问题。这对我不起作用。。。问题是菜单项在下次Delphi启动时不会显示。它对我很有效。尝试调试,看看您的案例中出现了什么问题。