使用 Delphi Open Tools API 在 Delphi IDE Insight(F6)中添加自定义项

7
我想使用 INTAIDEINsightService 中的 AddItemAddActionList 将条目添加到 Delphi 中的 IDE Insight 功能中。
根据 Delphi OTA wiki,INTAIDEINsightService 允许您注册自己的操作。我能找到的唯一参考资料是这里,它提到了 API 的名称以及其存在。Delphi 帮助文档中没有关于它的任何信息。在 Delphi XE 中的 ToolsAPI.pas 单元中,有两个方法可以让您注册操作:
function AddActionList(  Actions: TCustomActionList; ... ): Integer;
procedure RemoveActionList(const Index: Integer);

注释中写道,“项目将显示为[说明|]类别|TCustomAction.Caption。未指定类别的包含操作将不会显示。”。
我没有找到任何其他使用操作的文档或示例。一个简单的“Hello World”示例,其中一个操作或仅一个项目被注册为描述或类别“helloworld”,然后可以搜索并在按F6时显示出来,这将是完美的,但是最好使用操作。
看起来这样的向导必须实现INTAIDEInsightItem以便在IDE Insight内部呈现自己,但我不确定这是否对于hello-world示例是“必需的”。我真的不确定您是否必须使用操作,还是常规的“项目”添加就足够了。
(我的最终目标是创建一个新的gExperts风格专家,以“通过使用IDE Insight按名称搜索打开我的库路径中的任何单元”,但我将从逐个向IDE Insight添加单元名称开始。)

Marco Cantu的Delphi 2010书籍,第1章的示例代码包括一个没有Actions的示例--我已经在XE中使其工作。如果Marco Cantu恰好是stackoverflow用户,如果他能回答这个问题,那就再好不过了...但我仍然很想知道是否有人已经在IDE Insight中使用了ACTIONS。 - Warren P
1
Marco的代码在这里:http://code.marcocantu.com/p/marcodelphibooks/source/tree/HEAD/delphi2010handbook/01/CustomInsight - Warren P
为什么要删除toolsapi标签,David? - Warren P
3
Warren,当我有关于OTA的问题时,大多数情况下我会在CNPACKGexperts的源代码中找到答案。 - RRUZ
当然,Marco Cantù 在Stackoverflow上。我已经向他转达了你的愿望 :-) - menjaraz
1个回答

9
以下展示了'Commands'下的类别'Hello':

IDE Insight截图

unit Unit1;

interface

uses
  SysUtils, Classes, ActnList, ImgList, Controls;

type
  TDataModule1 = class(TDataModule)
    ActionList1: TActionList;
    ImageList1: TImageList;
    ActionHello: TAction;
    procedure ActionHelloExecute(Sender: TObject);
  private
  public
  end;

var
  DataModule1: TDataModule1;

implementation

{$R *.dfm}

uses
  ToolsAPI, Dialogs;

procedure TDataModule1.ActionHelloExecute(Sender: TObject);
begin
  ShowMessage('Hello, world!');
end;

var
  Index: Integer = -1;

initialization
  DataModule1 := TDataModule1.Create(nil);
  Index := (BorlandIDEServices as INTAIDEInsightService).AddActionList(DataModule1.ActionList1);

finalization
  if Index <> -1 then
    (BorlandIDEServices as INTAIDEInsightService).RemoveActionList(Index);
  FreeAndNil(DataModule1);

end.

dfm文件只是一个拥有操作列表、图像列表和动作的数据模块:

object DataModule1: TDataModule1
  OldCreateOrder = False
  Left = 218
  Top = 134
  Height = 215
  Width = 306
  object ActionList1: TActionList
    Images = ImageList1
    Left = 24
    Top = 16
    object ActionHello: TAction
      Category = 'Hello'
      Caption = 'Hello, World!'
      ImageIndex = 0
      OnExecute = ActionHelloExecute
    end
  end
  object ImageList1: TImageList
    Left = 88
    Top = 16
    Bitmap = {
      494C010101000C000C0010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
      0000000000003600000028000000400000001000000001002000000000000010
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000800080008000800086868600000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000008000800080008000FFFFFF00FFFFFF00C0C0C000868686000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000008000
      800080008000FFFFFF00FFFFFF000000000000000000C0C0C000C0C0C0008686
      8600000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      000000000000000000000000000000000000868686008000800080008000FFFF
      FF00FFFFFF000000000000000000800080008000800000000000C0C0C000C0C0
      C000868686000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000008686860080008000FFFFFF000000
      000000000000800080008000800080008000800080008000800000000000C0C0
      C000C0C0C0008686860000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000008686860000000000000000008000
      800080008000800080000080800000FFFF008000800080008000800080000000
      0000C0C0C000C0C0C00086868600000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000008686860080008000800080008000
      8000800080008000800080008000008080008000800080008000800080008000
      800000000000C0C0C00000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000080008000FFFFFF008000
      80008000800080008000800080008000800000FFFF0000FFFF00800080008000
      8000800080000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      000000000000000000000000000000000000000000000000000080008000FFFF
      FF0080008000800080008000800080008000800080000080800000FFFF0000FF
      FF00800080008000800000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000008000
      8000FFFFFF00800080008000800080008000008080008000800000FFFF0000FF
      FF00800080008000800080008000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      000080008000FFFFFF00800080008000800000FFFF0000FFFF0000FFFF008000
      8000800080008000800000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      00000000000080008000FFFFFF00800080008000800080008000800080008000
      8000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000080008000FFFFFF008000800080008000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000800080008000800000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      000000000000000000000000000000000000424D3E000000000000003E000000
      2800000040000000100000000100010000000000800000000000000000000000
      000000000000000000000000FFFFFF00FFFF000000000000FE3F000000000000
      F81F000000000000E00F00000000000080070000000000000003000000000000
      0001000000000000000000000000000000010000000000008001000000000000
      C001000000000000E000000000000000F000000000000000F803000000000000
      FC0F000000000000FE3F00000000000000000000000000000000000000000000
      000000000000}
  end
end

在这里,我将AddActionList方法的可选参数DescriptionCategory保留为空字符串,默认值为“命令”,Category的值来自动作列表,但您也可以指定自己的值,这将覆盖这些默认值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接