如何更新旧的IDE扩展代码,以便它不使用已弃用的ExptIntf和ToolsIntf单元?

时间:2016-11-22 11:13:11

标签: delphi toolsapi

我正在进行有关扩展IDE的第一次测试,但我只找到使用ExptInftToolsIntf的旧源代码,这些代码已被弃用(Delphi 2007)。

我正在寻找更新的示例代码或更新旧示例的帮助。

以下是我尝试更新旧示例所做的工作:

我是从this示例源代码开始的:

unit PanelEd; 

interface 

uses 
  Classes, Forms, Windows, Dialogs, ExptIntf, ToolIntf, 
  FileCtrl, SysUtils, EditIntf, DsgnIntf; 

type 
  TPanelEditExpert = class (TIExpert) 
  public 
    function GetStyle: TExpertStyle; override; 
    function GetName: string; override; 
    function GetAuthor: string; override; 
    function GetComment: string; override; 
    function GetPage: string; override; 
    function GetGlyph: HICON; override; 
    function GetState: TExpertState; override; 
    function GetIDString: string; override; 
    function GetMenuText: string; override; 
    procedure Execute; override; 
  end; 

// custom module for the panel 
type 
  TPanelModule = class (TCustomModule) 
  public 
    procedure ExecuteVerb(Index: Integer); override; 
    function GetVerb(Index: Integer): string; override; 
    function GetVerbCount: Integer; override; 
    procedure ValidateComponent(Component: TComponent); override; 
  end; 

procedure Register; 

implementation 

uses 
  StdCtrls, ExtCtrls, Buttons; 

// "standard" project expert 

function TPanelEditExpert.GetStyle: TExpertStyle; 
begin 
  // show up in the Help menu 
  Result := esStandard; 
end; 

function TPanelEditExpert.GetName: String; 
begin 
  // official name 
  Result := 'Panel Edit Wizard' 
end; 

function TPanelEditExpert.GetAuthor: string; 
begin 
  Result := 'Marco and Tim'; 
end; 

function TPanelEditExpert.GetComment: String; 
begin 
  Result := 'TPanelEditExpert Wizard'; 
end; 

function TPanelEditExpert.GetPage: string; 
begin 
  Result := ''; 
end; 

function TPanelEditExpert.GetGlyph: HICON; 
begin 
  Result := 0; 
end; 

function TPanelEditExpert.GetState: TExpertState; 
begin 
  Result := [esEnabled]; 
end; 

function TPanelEditExpert.GetIDString: String; 
begin 
  // must be unique 
  Result := 'DDHandbook.PanelEditWizard' 
end; 

function TPanelEditExpert.GetMenuText: String; 
begin 
  // the text of the menu item 
  Result := '&Panel Edit Wizard' 
end; 

procedure TPanelEditExpert.Execute; 
var 
  ModuleName, FormName, FileName: string; 
  ModIntf: TIModuleInterface; 
begin 
  ToolServices.GetNewModuleAndClassName ( 
    'Panel', ModuleName, FormName, FileName); 
  ModIntf := ToolServices.CreateModuleEx (FileName, FormName, 
    'Panel', '', nil, nil, 
    [cmNewForm, cmAddToProject, cmUnNamed]); 
  ModIntf.ShowSource; 
  ModIntf.ShowForm; 
  ModIntf.Release; 
end; 

// custom module methods 

function TPanelModule.GetVerbCount: Integer; 
begin 
  Result := 1; 
end; 

function TPanelModule.GetVerb(Index: Integer): string; 
begin 
  if Index = 0 then 
    Result:= 'Rename...'; 
end; 

procedure TPanelModule.ExecuteVerb(Index: Integer); 
var 
  NewName: string; 
begin 
  if Index = 0 then 
  begin 
    NewName := Root.Name; 
    if InputQuery ('Panel Module Editor', 
        'New panel name:', NewName) then 
      Root.Name := NewName; 
  end; 
end; 

procedure TPanelModule.ValidateComponent(Component: TComponent); 
begin 
  if not (Component is TButton) and 
      not (Component is TSpeedButton) then 
    raise Exception.Create ('The panel can host only buttons'); 
end; 

procedure Register; 
begin 
  RegisterCustomModule (TPanel, TPanelModule); 
  RegisterLibraryExpert(TPanelEditExpert.Create); 
end; 

end. 

official documentation我读过,我应该使用TNotifierObject来实现IOTAWizardIOTAMenuWizard接口(来自ToolsAPI单位),而不是{{ 1}}和ExptIntf

为了更新示例代码,我已按照以下步骤操作:

  1. 从源代码中删除了ToolsIntfExptIntf
  2. 在使用条款中添加了ToolsIntf
  3. ToolsAPI
  4. 替换TExpertState
  5. TWizardState替换为esEnabled
  6. wsEnabled替换为RegisterLibraryExpert
  7. 执行此操作后,我仍然在RegisterPackageWizardTExpertStyle上发出未声明的标识符错误。

    ToolServices

    如何更新这些部分和/或在哪里可以找到不使用弃用单位的示例?

1 个答案:

答案 0 :(得分:0)

Warren Postma在4月份在当地的Delphi用户组发表了关于使用Open Tools API创建IDE插件的演讲。

他的enter image description here在线,包括他的源代码链接。

注意:他在解析器示例中遇到问题,可能会在已发布的示例代码中清除,也可能不会清除。