2016-11-22 3 views
-2

Я делаю свои первые тесты о расширении IDE, но я только нахожу старые исходники, которые используют ExptInft и ToolsIntf, которые устарели (Delphi 2007).Как обновить старый код расширения IDE, чтобы он не использовал устаревшие блоки ExptIntf и ToolsIntf?

Я ищу более новый пример кода или помощь для обновления старого примера.

Вот что я за то, чтобы обновить старый пример:

Я начал с 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 который реализует интерфейсы IOTAWizard и IOTAMenuWizard (от ToolsAPI единиц), вместо ExptIntf и ToolsIntf.

Для того, чтобы обновить код примера, я следовал следующие шаги:

  1. Удалены ExptIntf и ToolsIntf из исходного кода.
  2. Добавлен ToolsAPI в раздел uses.
  3. Заменено TExpertState с TWizardState
  4. Заменены esEnabled с wsEnabled.
  5. Заменено RegisterLibraryExpertRegisterPackageWizard.

После этого, я до сих пор необъявленной ошибки идентификатор на TExpertStyle и ToolServices.

function TPanelEditExpert.GetStyle: TExpertStyle; 
begin 
    // show up in the Help menu 
    Result := esStandard; 
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; 

Как эти детали должны быть обновлены и/или где я могу найти пример, который не использует устаревшие блоки?

+1

Вы можете посмотреть на GExperts, у него много функций, совместимых с последней версией Delphi, и это проект с открытым исходным кодом: https://sourceforge.net/projects/gexperts –

+0

Спрашивать о downvotes в теме. Я знаю, что вас расстраивают голоса, но ваше редактирование не подходит. –

+1

Вы можете найти пример [здесь] (http://www.tdug.com/2016/04/april-meeting-follow-up-2/) –

ответ

0

Уоррен Постма в апреле в локальной группе пользователей Delphi говорил о создании плагинов IDE с использованием API открытых инструментов.

Его meeting notes находятся на сайте, включая ссылки на его исходный код.

Примечание. У него возникли проблемы с примером анализатора, который может быть или не быть очищен в опубликованном образце кода.

+1

Это ответ только на ссылку. Ссылки подходят для поддержки ответа, но здесь должны быть предоставлены данные высокого уровня на сайте. –

+0

Я отвечал на вопрос «Где найти». Не стесняйтесь удалять мой ответ, если он нарушает соглашение. –

+0

Я не могу удалить его. Я должен был бы получить отрицательный результат, а затем удалить его три раза. Этого трудно достичь. Вы можете просто удалить его и преобразовать в комментарий. –