Как получить структуру модуля с помощью ToolsAPI в Delphi?

Я хочу получить информацию о структуре модуля (паскаль) с помощью ToolsAPI. так же, как делает представление структуры IDE.

Классы, Записи, Интерфейсы, Переменные / Константы и т. Д. Члены, Параметры и т. Д.

Уже есть простой и эффективный способ получить эти метаданные?

2 ответа

Решение

Может быть, использование парсера не так уж и плохая идея?

AFAIK нет способа запросить специальную структурированную информацию для данного файла.

Что вы можете сделать, это получить доступ к информации на панели структуры. Этот способ требует, чтобы файл был активным модулем (это может быть достигнуто OTA), вывод зависит от настроек панели структуры (Инструменты | Параметры... -> Параметры среды | Проводник) и, если узел является полем, процедура или что-то еще должно быть определено по индексу изображения, родитель...

Этот код проходит через панель структуры.

procedure StructureViewToSL(ASL: TStringList);

  procedure TreeToSL(ANode: IOTAStructureNode; ASL: TStringList; const APrefix: string);
  var
    I: Integer;
  begin
    ASL.Add(APrefix + ANode.Caption);
    for I := 0 to ANode.ChildCount - 1 do
      TreeToSL(ANode.Child[I], ASL, APrefix + '  ');
  end;

var
  StructureView: IOTAStructureView;
  StructureContext: IOTAStructureContext;
  Node: IOTAStructureNode;
  I: Integer;
begin
  StructureView := BorlandIDEServices as IOTAStructureView;
  StructureContext := StructureView.GetStructureContext;
  for I := 0 to StructureContext.RootNodeCount - 1 do
  begin
    Node := StructureContext.GetRootStructureNode(I);
    TreeToSL(Node, ASL, '');
  end;
end;
Другие вопросы по тегам