Не вытанцовывается IDE expert в DELPHI 6
Есть задача написать эксперт, добавляющий команду в меню Tools и вот какая штука. Сразу после установки работает, но после перезапуска IDE добавленная в меню команда исчезает, хотя имя пакета в списке остаётся. Ещё иногда при закрытии окна DELPHI вылетает exception eListError. Причём, вылетает оно как-то бессистемно, даже не уловишь при каких условиях.
Так нет ли среди вас кого-нибудь более опытного в деле написания экспертов, кто мог бы посмотреть код и сказать, что я не так делаю?
Спасибо!
Вот исходник модуля:
unit MainUnit;
interface
uses ToolsApi, Dialogs, SysUtils, Forms, Menus, ActnList;
type
TTimeTracking = class(TNotifierObject, IOTAWizard)
private
FMenuItem : TMenuItem;
Faction : TAction;
public
constructor Create;
destructor Destroy; override;
function GetIDString: string;
function GetName: string;
function GetState: TWizardState;
procedure Execute;
procedure OnMenuClick(Sender: TObject);
end;
procedure Register;
implementation
{ TTimeTracking }
function NTAServices: INTAServices;
begin
Result := (BorlandIDEServices as INTAServices);
end;
procedure Register;
begin
RegisterPackageWizard(TTimeTracking.Create);
end;
// ---- Реализация методов TTimeTracking -----
constructor TTimeTracking.Create;
var
MainMenu : TMainMenu;
ToolsItem: TMenuItem;
TimeTrk: TMenuItem;
const
constCaption = 'Time tracking';
begin
// Делаем новую команду меню
MainMenu := NTAServices.MainMenu;
ToolsItem := MainMenu.Items.Find('Tools'); // Получаем ссылку на меню Tools
TimeTrk := ToolsItem.Find(constCaption); // Ищем команду Time tracking
if Assigned(TimeTrk) then Exit; // Если уже есть - уходим
// Конструируем новый элемент
FMenuItem := TMenuItem.Create(ToolsItem);
FMenuItem.Caption := constCaption;
FMenuItem.OnClick := OnMenuClick;
// Вставляем...
ToolsItem.Add(FMenuItem);
end;
destructor TTimeTracking.Destroy;
begin
if Assigned(FMenuItem) then FMenuItem.Free;
inherited;
end;
procedure TTimeTracking.Execute;
begin
end;
function TTimeTracking.GetIDString: string;
begin
result := 'TIME.TRACKING.EXPERT';
end;
function TTimeTracking.GetName: string;
begin
result := 'timetracking';
end;
function TTimeTracking.GetState: TWizardState;
begin
result := [wsEnabled];
end;
procedure TTimeTracking.OnMenuClick(Sender: TObject);
begin
end;
end.