如何通过Delphi中的ToolsAPI获取模块的结构?

时间:2010-06-19 05:07:43

标签: delphi structure toolsapi

我想通过ToolsAPI获取模块(pascal单元)的结构信息。就像IDE的结构视图一样。

类,记录,接口,变量/常量等 成员,参数等

有没有一个简单的&获取这些元数据的有效方法是什么?

2 个答案:

答案 0 :(得分:4)

AFAIK无法查询给定文件的特殊结构化信息。

您可以执行的操作是访问“结构”窗格中的信息。这种方式要求文件是活动模块(可以通过OTA实现),输出取决于Structure窗格设置(Tools | Options ... - > Environment Options | Explorer),如果节点是字段,一个程序或任何需要确定的图像索引,父...

此代码遍历“结构”窗格。

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;

答案 1 :(得分:2)

也许使用parser并不是一个坏主意?