我正在做关于扩展 IDE 的第一次测试,但我只发现使用ExptInft
and的旧源代码ToolsIntf
已被弃用(Delphi 2007)。
我正在寻找更新的示例代码或更新旧示例的帮助。
这是我为尝试更新旧示例所做的:
我从这个示例源代码开始:
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.
在官方文档中,我读到我应该使用TNotifierObject
who implements IOTAWizard
and IOTAMenuWizard
interfaces (From ToolsAPI
unit),而不是ExptIntf
and ToolsIntf
。
为了更新示例代码,我执行了以下步骤:
- 已从源代码中
ExptIntf
删除。ToolsIntf
- 添加
ToolsAPI
到使用条款。 - 替换
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;
应该如何更新这些部分和/或在哪里可以找到不使用已弃用单元的示例?