ToolsApi 中的一些服务,功能我已经能够使用
可是对于IOTAEditActions的功能实在找不到怎么用,请高手指点!

解决方案 »

  1.   

    如果说Delphi的IDE有什么优势的话,那么我想就是它本身就是由Delphi编写而成,因此我们能定制Delphi的IDE环境,通过Delphi的ToolsAPI的Com接口。     下面这个例子使用IOTAKeyboardBinding接口,实现对快捷键的重新绑定,相关的接口定义见ToolsAPI.pas。源码很简单,相信你一看就懂。该例子用来修改与中文环境冲突的Code Completion得快捷键,改成Ctrl+Alt+Shift+P和Ctrl+Alt+Shift+O,如果你遇上什么问题,请写信给我。 //EagleBufferList.pas,2002.5.24 { 
    Pan Ying,Zero Studio 
    All Right Reserved. The Demo show how to change Delphi's Key Binding,just in Delphi 
    press Ctrl+Alt+Shift+P to use Code Completion.You can contact me by 
    sending e-mail to me ([email protected]) Some code from Delphi's ToolsAPI Demo. Attention: 
    This software is provided 'as-is', without any express or 
    implied warranty. In no event will the author be held liable 
    for any damages arising from the use of this software. This unit is free to use but the origin of this software 
    must not be misrepresented, you must not claim that you 
    wrote the original software. Feel free to use this component in your product including 
    commercial applications. If You alert this component's code to make it better, 
    please remember to tell me about it , let's to make it better 
    together. This attention may not be removed or altered from any source 
    distribution. Feedback: 
    E-Mail: [email protected] 
    HomePage:http://myzeroworld.yeah.net Version 1.1 
    Remove some useless code. 
    Version 1.0 
    Initial Version. 
    } unit EagleBufferList; interface procedure Register; implementation uses Windows, Classes, SysUtils,Menus, ToolsAPI, Controls ; type 
      TBufferList = class(TNotifierObject, IUnknown, IOTANotifier, 
        IOTAKeyboardBinding)     
        function GetBindingType: TBindingType; 
        function GetDisplayName: string; 
        function GetName: string; 
        procedure BindKeyboard(const BindingServices: IOTAKeyBindingServices); 
      protected     
        procedure CodeCompletion(const Context: IOTAKeyContext; KeyCode: TShortcut; 
          var BindingResult: TKeyBindingResult); 
      end; 
       
    resourcestring 
      sBufferList = 'Eagle''s Buffer List';   //register this key binding 
    procedure Register; 
    begin 
      (BorlandIDEServices as IOTAKeyBoardServices).AddKeyboardBinding(TBufferList.Create);   
    end; { TBufferList } 
    //the code to bind key 
    procedure TBufferList.BindKeyboard(const BindingServices: IOTAKeyBindingServices); 
    begin 
      BindingServices.AddKeyBinding([ShortCut(Ord('P'), [ssShift, ssCtrl, ssAlt])], CodeCompletion, Pointer(csCodeList or csManual)); 
      BindingServices.AddKeyBinding([ShortCut(Ord('O'), [ssShift, ssCtrl, ssAlt])], CodeCompletion, Pointer(csParamList or csManual));   
    end; //do code completion 
    procedure TBufferList.CodeCompletion(const Context: IOTAKeyContext; 
      KeyCode: TShortcut; var BindingResult: TKeyBindingResult); 
    begin   (Context.EditBuffer.TopView as IOTAEditActions).CodeCompletion(Byte(Context.Context)); 
      BindingResult := krHandled; end; function TBufferList.GetBindingType: TBindingType; 
    begin 
      Result := btPartial; 
    end; function TBufferList.GetDisplayName: string; 
    begin 
      Result := sBufferList; 
    end; function TBufferList.GetName: string; 
    begin 
      Result := 'EagleKing.BufferList';  //do not localize 
    end; end.