我正在进行有关扩展IDE的第一次测试,但我只找到使用ExptInft
和ToolsIntf
的旧源代码,这些代码已被弃用(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
来实现IOTAWizard
和IOTAMenuWizard
接口(来自ToolsAPI
单位),而不是{{ 1}}和ExptIntf
。
为了更新示例代码,我已按照以下步骤操作:
ToolsIntf
和ExptIntf
。ToolsIntf
。ToolsAPI
TExpertState
TWizardState
替换为esEnabled
。wsEnabled
替换为RegisterLibraryExpert
。执行此操作后,我仍然在RegisterPackageWizard
和TExpertStyle
上发出未声明的标识符错误。
ToolServices
如何更新这些部分和/或在哪里可以找到不使用弃用单位的示例?