Местоположение файла пакета Delphi во время регистрации

Я пытаюсь добавить свой новый файл справки HTML в Delphi 10 Seattle. Для этого требуется зарегистрировать собственный пункт меню, согласно документации:

Элемент меню сторонней справки (Delphi)

Единственное, чего мне не хватает, так это того, как определить каталог установки пакета компонента во время выполнения (или фактически во время разработки/регистрации), чтобы я мог определить Path\to\your\local\help\file на практике. Мои файлы справки будут установлены относительно файлов .bpl, поэтому мне просто нужно найти этот путь.

Что я могу понять, так это то, что, возможно, мне следует использовать интерфейс ToolsAPI IOTAPackageServices?


person Jouni Aro    schedule 13.10.2015    source источник
comment
Я считаю, что это просто относительно пакета, а не абсолютного пути. EDIT На самом деле это может быть не так, после просмотра этой ссылки. Документация Delphi всегда имела привычку опускать важные фрагменты информации для реальных сценариев.   -  person Jerry Dodge    schedule 13.10.2015
comment
Да, версия этой страницы документа, поставляемая с Delphi 10, содержит код, который даже не компилируется... На онлайн-странице код кажется исправленным, но все еще не очень аккуратным.   -  person Jouni Aro    schedule 13.10.2015
comment
Кроме того, я понятия не имею, должна ли работать контекстно-зависимая справка по компонентам - по крайней мере, она не работает с компонентами Indy, которые поставляются с Delphi 10, - и я не могу заставить ее работать для себя.   -  person Jouni Aro    schedule 13.10.2015


Ответы (2)


Вы можете получить имя исполняемого файла вашего пакета, вызвав SysUtils.GetModuleName(HInstance).

person Ondrej Kelle    schedule 13.10.2015

Мне удалось использовать эту версию, которая также работает, но слишком сложна:

var
  PackageServices: IOTAPackageServices;
  I: Integer;
  Package: IOTAPackageInfo;
...
  if Supports(BorlandIDEServices, IOTAPackageServices, PackageServices) then
  begin
    I := 0;
    while True do
    try
      Package := PackageServices.Package[I];
      if Package = nil then
        break;
      if StartsStr('MyProduct', Package.Name) then
      begin
        // The help file is on the "side" directory of the package
        HelpFilePath := ExtractFilePath(Package.FileName) + '..\Help\MyProduct.chm';
      end;
      Inc(I);
    except
        break;
    end;
  end;
person Jouni Aro    schedule 13.10.2015