我成功地在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的哪個版本是這樣的? –