Delphi Open Tools API - Simple Wizard

    之前向大家简单的介绍了Open Tools API,现在我们就要亲自动手编写一个简单的Wizard,来体验Open Tools API的魅力所在。 

    在Delphi6中,不再推荐大家使用ExptIntf单元中的TIExpert类做为我们自己编写的Wizard的基类,而是改用TInterfacedObject做为其基类,并实现ToolsAPI单元中的一个或我个接口。

    编写一个Wizard必须要实现ToolsAPI单元中的IOTAWizard接口和IOTAWizard的父接口INotifier(尽管Delphi不会调用INotifier接口中的任何方法)。如果你想编写一个Menu Wizard,必须实现IOTAWizard、INotifier和IOTAMenuWizard接口中的方法;如果想编写一个Form Wizard或是Project Wizard,必须实现IOTAWizard、INotifier和IOTARepositoryWizard接口中的方法(在ToolsAPI单元中为IOTARepositoryWizard接口另定义了两个别名IOTAFormWizard和IOTAProjectWizard,分别针对Form Wizard和Project Wizard)。

    在Delphi6中,Wizard的注册方式做了相应的变化,在Package中实现的Wizard不再是调用ExptIntf单元中的RegisterLibraryExpert方法,而是改为调用RegisterPackgeWizard方法。如果你编写的Wizard是在DLL中实现的,则不需要调用此方法,而是使用ToolsAPI单元中的IOTAWizardServices接口来注册和移除自己编写的Wizard。

unit SimpleWizard;

interface

uses ToolsAPI, Dialogs;

type
  TMSimpleWizard 
=   class (TInterfacedObject, IOTANotifier, IOTAWizard)
  
public
    
{ IOTANotifier }
    procedure AfterSave;
    procedure BeforeSave;
    procedure Destroyed;
    procedure Modified;

    
{ IOTAWizard }
    function GetIDString: 
string ;
    function GetName: 
string ;
    function GetState: TWizardState;
    procedure Execute;
  end;

implementation

function TMSimpleWizard.AfterSave;
begin
  
// Do Nothing
end;

function TMSimpleWizard.BeforeSave;
begin
  
// Do Nothing
end;

procedure TMSimpleWizard.Destroyed;
begin
  
// Do Nothing
end;

procedure TMSimpleWizard.Execute;
begin
  ShowMessage(
' This Wizard is trying to do something useful. ' );
end;

function TMSimpleWizard.GetIDString: String;
begin
  Result :
=   ' ChirsMao.Simple Wizard ' ;
end;

function TMSimpleWizard.GetName:String;
begin
  Result :
=   ' Simple Wizard ' ;
end;

function TMSimpleWizard.GetState: TWizardState;
begin
  Result :
=  [wsEnabled];
end;

procedure TMSimpleWizard.Modified;
begin
  
// Do Nothing
end;

    在DLL中实现Wizard,必须在Uses从句中第一个引用ShareMem单元。并且要在DLL的Terminate方法中手工移除掉注册到IDE中的Wizard。

Library SiampleWizardDLL;

uses ShareMem, ToolsAPI, SiampleWizard;

var
  Index: Integer  
=    - 1 ;   // 全局变量,保存Wizard添加到IDE中的索引号

procedure Terminate;
var
  Services: IOTAWizardServices;
begin
  Services :
=  BorlandIDEServices  as  IOTAWizardServices;
  Services.RemoveWizard(Index);
end;

function Initialize(
const  Services: IBorlandIDEServices; RegisterProc: TWizardRegisterProc; var TerminateProc: TWizardTerminateProc): Boolean; stdcall;
var
  WizardServices: IOTAWizardServices;
begin
  
// 如果你使用了VCL*.BPL,否则需要保存这个接口变量
  BorlandIDEServices : =  Services;
  WizardServices :
=  BorlandIDEServices  as  IOTAWizardServices;
  WizardServices.AddWizard(TSimpleWizard.Create);
  TerminateProc :
=  Terminate;
  Result :
=  True;
end;

Exports
  Initialize 
as  WizardEntryPoint;

end.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值