Я делаю свои первые тесты о расширении 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
.
Для того, чтобы обновить код примера, я следовал следующие шаги:
- Удалены
ExptIntf
иToolsIntf
из исходного кода. - Добавлен
ToolsAPI
в раздел uses. - Заменено
TExpertState
сTWizardState
- Заменены
esEnabled
сwsEnabled
. - Заменено
RegisterLibraryExpert
RegisterPackageWizard
.
После этого, я до сих пор необъявленной ошибки идентификатор на 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;
Как эти детали должны быть обновлены и/или где я могу найти пример, который не использует устаревшие блоки?
Вы можете посмотреть на GExperts, у него много функций, совместимых с последней версией Delphi, и это проект с открытым исходным кодом: https://sourceforge.net/projects/gexperts –
Спрашивать о downvotes в теме. Я знаю, что вас расстраивают голоса, но ваше редактирование не подходит. –
Вы можете найти пример [здесь] (http://www.tdug.com/2016/04/april-meeting-follow-up-2/) –