Delphi Open Tools Api实例研究(二)

Delphi Open Tools API概述     Delphi为我们提供了一组AIP(Open Tools API),允许我们使用这些函数,将自定义的菜单项、工具栏按钮、创建窗体专家以及更多的东西加入到IDE中,以提高自己的开发效率。    使用Tools API是一件很容易的事,只要实现一些特定的接口,并调用另一些接口提供的服务即可。编写一个Tools API代码和编写组件或是属性编辑器很类似,必须将这些代码编译为设计期包或是DLL 阅读详情

先行知识:Delphi/接口/DLL/COM(了解)

难度:★★☆☆☆

 

    在开始之前先说一些题外话,这段时间一直很忙(马上就要期末考试,而且最惨的是现在正在忙着准备即将到来的英语4级考试),所以自己也不知道这篇文章够不够份量。这篇文章的内容可能不是太多,但我还是抽时间把它写了出来作为我们的Delphi Open Tools Api实例研究(二)。另外我又发现了一些很不错的关于这方面的资料和网站,一并在文后推荐给大家。

还记得上次的实例研究一吗?我们展示了一个通过设计时组件包扩展delphi的例子。这次我们仍将做一个实际意义的delphi插件,菜单仍向上次一样不变,不过这次的不是上次的向源文件插入一行代码,而是向当前工程中添加一份开发文档,并显示在delphi的代码编辑器中提供给开发者修改。(同时也保存在工程文件所在的目录下)。然而这次与上次有一个很大的不同,也是这次最重点要说的地方是:我们将把这次的插件编译成dll,而不是上次的组件包,这给创建自己更人性话的插件安装程序(而不是叫用户打开一个组件包来自己安装)提供了机会。

先来看看这次的重点,我们建立了一个动态连接库项目,并在加入的第一个单元文件内实现了我们的插件类。与上次不同的是,我们并不采用传统的组件注册过程Register,而是在单元类定义了一个类型为TwizardInitProc的全局函数,并在项目文件中以WizardEntryPoint名称导出(注意:必须使用这个名称。)

exports

 InitNewMenu Name WizardEntryPoint;

 

下面是单元中的这个函数的原形和实现:

function InitNewMenu(const BorlandIDEServices:IBorlandIDEServices;

    RegisterProc:TWizardRegisterProc;var Terminate:TWizardTerminateProc):boolean;stdcall;

//RegisterProc:TWizardRegisterProc;参数用来创建向导,实际上这个初始化函数是用来创建一个dll

//形式的传统Wizard这种时候就可以向RegisterProc参数传递一个实现了IOTAWizard的类实例,用以

//注册向导,如同这样RegisterProc(xxx.Create)。这里我们只是使用这个函数作为初始化dll的入口点

//所以并没有使用这个函数,而是直接MyNTATest:=TNTATest.Create; 另外var Terminate参数用来释放

//你在向导中使用的资源,你可以赋给它一个普通的过程类型如Terminate:=xxx; xxx为一个procedure

//这样ide在退出时,便会调用这个过程来释放资源。注意这个函数必须以stdcall指示。

var

 svcs:IOTAServices;

begin

 result:=BorlandIDEServices <> nil;

 if result then

 begin

  svcs:=BorlandIDEServices as IOTAServices;

  //保存BorlandIDEServices指针

  ToolsAPI.BorlandIDEServices:=BorlandIDEServices;

  //设置dll的host application句柄

  Application.Handle:=svcs.GetParentHandle;

  MyNTATest:=TNTATest.Create;

 end;

end;

 

另外这次也使用了一个新的OTA接口,主要体现在菜单项的第一个事件内(我们完成了向当前工程中添加一份开发文档的工作):IOTAActionServices,这是个相当有用的接口,在ide运行时由BorlandIDEServices实现,可以用来完成对IDE各种功能的调用。如:CloseFile、OpenFile、OpenProject、ReloadFile、SaveFile。这些功能的作用根据它们的名称就能猜测出来。本来我还想使用IOTAProjectOptions接口来得到当前工程的相关信息和配置选项一并写在文档文件里,但并没有得到理想的结果,最多只得到了关于工程有哪些Options的字符串列表。我们有可能将在下次的文章中研究和IOTAProject相关的一系列接口。下面是产生文档部分的代码(对应于菜单项的第一个菜单事件):

 

procedure TNTATest.AddDocumentToPro(sender:TObject);

var

 templen,i,temppos:integer;

 DocumentFile:TextFile;

 ModuleCount: Integer;

 TempString,MoudleFilePath:String;

begin

 //请求IOTAModuleServices t接口

 Supports(BorlandIDEServices,IOTAModuleServices,MoudleService);

 ModuleCount:=MoudleService.ModuleCount;

 if ModuleCount<>0 then //没有任何文件打开

 begin

  CurentMoudle:=MoudleService.CurrentModule;

  //获得当前的文件名,我们可以用它得到项目路径

  TempString:=CurentMoudle.FileName;

  //下面的部分用来分析字符串并取出项目的路径//

  i:=pos('/',TempString);templen:=length(TempString);temppos:=i;

  while i<>0 do

  begin

   TempString:=RightStr(TempString,templen-i);

   i:=pos('/',TempString);templen:=length(TempString);temppos:=temppos+i;

  end;

  MoudleFilePath:=leftstr(CurentMoudle.FileName,temppos);

  ////////////////////////////////////////////

  if Supports(BorlandIDEServices,IOTAActionServices,ActionServices) then

  begin

   AssignFile(DocumentFile,MoudleFilePath+'DocumentFile.txt');

   Rewrite(DocumentFile);

   try

    writeln(DocumentFile,'项目名称:');

    writeln(DocumentFile,'项目主程序名:');

    writeln(DocumentFile,'项目版本号:');

    writeln(DocumentFile,'项目描述:');

    writeln(DocumentFile,'项目组成员:');

    writeln(DocumentFile,'文档建立时间:'+DateTimeToStr(now));

   finally

    CloseFile(DocumentFile);

   end;

   //注意,我们用到了IOTAActionServices的OpenFile方法来打开刚才保存的文档

   ActionServices.OpenFile(MoudleFilePath+'DocumentFile.txt');

  end;

 end

 else

  messagebox(IDEHandle,'There isn''''t Active Project.','DocCreator',MB_ICONWARNING);

end;

 

其余的代码(如向IDE添加菜单等和上次的类似),在这里我们就省略不写出来了,你可以参看上一篇文章(连接: http://www.youkuaiyun.com/develop/read_article.asp?id=21725 ),也可以给我来信得到代码(地址和上一次的一样)。最后当我们完成代码编写时,我们就可以将它编译成dll文件。现在来看看我们怎么来安装我们的插件:首先退出delphi,打开注册表,在HKEY_CURRENT_USER/Software/Borland/Delphi/7.0/Experts键下新建立一个字符串类型的值,名称为我们的插件的名称,值为我们编译得到的dll的路径。现在重新启动delphi,怎么样,插件开始工作了吧。有了这个办法后相信我们可以很容易的为我们的插件创建安装程序和反安装程序(无非就是简单的操作注册表而已,当你再次推出delphi,并在注册表中删除刚才建立的值,重启delphi会发现插件已经卸载了),使其变的对用户更友好,也可以更加方便我们的发布。最后再做一点说明:关于调试dll插件的说明,我建议不要在编码过程中返太多的错误(指运行时的),你会发现你会为调式插件而不得不一次次的启动、关闭delphi,这是一件相当烦人的事情(把我害惨了),我建议你可以先把插件作为上一次的组件包形式进行测试和调式,这样不用重启delphi,当调式成功后再改为dll形式的。另外这次的插件依然以delphi7为基础,在低版本的delphi中可能会有错误。最后说明的是,这个插件可能会使delphi在退出的时候产生一个AV错误,我暂时还没有解决这个问题(希望高人指教),虽然我使用了string类型,但我也的确引用了sharemem单元。我也尝试在Terminate参数中向其赋一个退出释放资源的函数,但问题依旧。

在文章的最后我向大家推荐一些我最近发现的一些关于OTA的相当不错的网站和资料:

http://www.gexperts.org/opentools/  在这里你将会得到一份OTA的FAQ,相当不错。

http://www.tempest-sw.com/opentools/  一些老版本的OTA资料

http://home.quicknet.nl/qn/prive/rapp/delphi/delphi.html  OTA部分接口的相关资料和例子

http://www.frasersoft.net/program/  delphi的OTA帮助补丁(非官方),但相当不全

10、使用Open Tools API提升Delphi开发效率 本文详细介绍了如何使用Delphi的Open Tools API进行组件编辑器注册、IDE服务获取、项目和模块处理,以及编写各种类型的向导(如自定义向导、DLL向导、表单向导和DDG搜索向导)。通过这些功能,开发者可以显著提升开发效率和灵活性,并实现对Delphi IDE的深度定制。 阅读详情

相关推荐

47、使用Open Tools API增强Delphi IDE

本文详细介绍了如何使用Delphi的Open Tools API增强IDE功能,包括注册自定义组件编辑器、获取IDE服务、处理项目和模块的基本与高级操作。通过这些技术,开发者可以更灵活地定制和集成开发环境,提高开发效率和项目管理能力。

g8f9d0s1a2的博客 82

Delphi Open Tools Api实例研究(一)

Delphi Open Tools Api实例研究(一)先行知识:Delphi/接口/VCL组件包/COM(了解)难度:★★☆☆☆ 在这篇文章正式开始以前,首先向大家道歉。因为这个月的专栏文章本该很早就发布,但由于一些事情所以一直推迟到现在,并且这个月也只发布了这么一篇。另外,关于这篇文章我觉得我应该感谢csdn上的几位朋友,他们是chechy、FrameSniper、pankun

hkbarton的专栏 1942

BCB与Delphi中ToolsAPI的使用与实践

Delphi编译器是一种高级语言编译器,它将Object Pascal语言的源代码(.pas文件)转换成可执行的机器代码。编译过程涉及几个关键步骤,包括词法分析、语法分析、语义分析、中间代码生成、优化和目标代码生成。词法分析(Lexical Analysis):编译器读取源代码,将其分解成一系列的标记(tokens),如标识符、关键字、运算符等。语法分析(Syntax Analysis):分析标记流,以确定源代码的语法结构是否符合语言的语法规则。

weixin_42527589的博客 1106

《Delphi高级辅助工具精解》PDF版

《Delphi高级辅助工具精解》,中国铁道出版社出版,作者:谭燕,赵磊,李之明。简介: Delphi作为一个面向对象程序设计的系统构建的集成工具,已经拥有了比较稳定的第三方工具,借助于这些工具可以最大限度地提高相应的应用程序开发效率。本书针对这一特点, 重点对人秋IDE(集成开发环境)增强工具的GExperts、最受欢迎的第三方代码编写工具CodeRush、调试工具CodeSite和系统建模工具ModelMaker做了比较全面而系统的介绍。 全书语言通俗,重点突出,实用性强,适合初、中级Delphi程序开发人员参阅。 目录:第1章 领略GExperts 1-1 序 言 1-2 GExperts的安装 1-3 Delphi IDE中的GExperts 1-4 功能组件的介绍 1-4-1 Procedure List(过程列表工具) 1-4-2 Expert Manager(专家管理器) 1-4-3 Grep search 1-4-4 Message Dialog(提示对话框制作) 1-4-5 Backup project(项目备份) 1-4-6 Clear directories(清除目录中的垃圾文件) 1-4-7 Clipboard History(剪贴板历史) 1-4-8 Favorite Files(收藏的文件) 1-4-9 Urce Export(源代码文件输出)1-4-10 Code Librarian(代码库工具)1-4-11 ASCII chart(ASCII图表) 1-4-12 Replace Components(组件替换工具) 1-4-13 Component Grid(组件网格) 1-4-14 Components To Code(产生组件的代码) 1-4-15 Editor Experts(编辑器专家) 1-5 GExperts的配置环境 1-5-1 File Location(文件及目录位置) 1-5-2 Editor Experts(代码编辑器专家)1-5-3 IDE扩展 1-5-4 Palette(面板) 第2章 初见CodeRush 2-1 初见CodeRush 2-1-1 CodeRush概述2-1-2 什么是新的内容 2-1-3 安装CodeRush 2-2 键盘模板(Key Templates) 2-2-1 键盘模板的介绍 2-2-2 使用模板生成变量2-2-3 使用模板生成方法2-2-4 设置变量 2-2-5 返回变量的自动化 2-2-6 定义程序结构 2-2-7 键盘模板的配置2-2-8 Template Coach2-2-9 Clipboard History 2-2-10 Bookmarks 2-2-11 Diagram repository 2-2-12 Flowchart 2-2-13 Samples(示例) 2-2-14 Sequence(顺序)2-2-15 Files(文件查找与显示) 2-2-16 Search Files(搜索文件)2-2-17 Statistics(统计工具) 2-2-18 尾声 第3章 CodeRush的窗体设计工具 3-1 序 言 3-2 Align Palette 3-3 Anchor Palette3-4 LOCK/Unlock Controls 3-5 Magnifier(放大器) 3-6 Quick Connect(快速连接) 3-7 Reveal Links 3-8 Show Active DataSets(显示激活的数据集)3-9 Tab Order 第4章 CodeRush的代码辅助增强工具 4-1 程序代码结构增强显示 4-1-1 配置环境 4-1-2 Block Selection(选择块) 4-1-3 Colors(颜色) 4-1-4 Jumping(跳转结构) 4-1-5 Lines(边线) 4-1-6 Options(选项)4-1-7 Timing(时间参数) 4-2 代码编写的自动化 4-2-1 Autofill(自动代码填充) 4-2-2 变量输入的自动化 4-2-3 函数输入自动化 4-2-4 过程、函数粘贴的自动化 4-2-5 注释自动化 4-2-6 结构代码输入自动化 第5章 首屈一指的调试工具CodeSite 5-1 序 言 5-2 CodeSite简介 5-2-1 CodeSite Object介绍 5-2-2 利用CSGlobalObject组件发送消息 5-2-3 利用CSObject组件发送消息 5-2-4 CSGlobalObject与CSObject组件的区别 5-3 CodeSite 调试消息发送 5-3-1 消息的类别 5-3-2 更多的消息发送方法 5-3-3 AddCheckPoint方法 5-

delphi界面美化控件FlatStyle

delphi界面美化控件FlatStyle,包括安装说明文档,delphi开发人员福音

BDS2006(即Delphi2006)FTP下載地址 <img src="/images/sunny.gif

BDS2006(即Delphi2006)FTP下載地址,速度非常地快

Delphi的插件框架WisdomPluginFramework_V1.6

WisdomPluginFramework是融合OSGI微内核理念 + Eclipse的扩展点概念而精心设计的轻量级插件框架,由Delphi实现,但可以使用于Delphi、BCB、VC++中,提供非常强大灵活的插件调度能力,让你充分享受插件式编程的乐趣。作者:IceAir(斑马猪) Blog:https://www.cnblogs.com/IceAir/p/3855559.html

TMS Plugin Framework 6.0.5 FS

TMS Plugin Framework 6.05 源码版,一个插件式的架构控件包。有一个插件的管理者组件,还有一个插件建立向导。

Delphi Open Tools Api实例研究(一) (转)

Delphi Open Tools Api实例研究(一) (转)[@more@]Delphi Open Tools api实例研究(一)XML:namespace prefix = o ns = "urn:schemas-mic...

csd3176的博客 198

delphi源码 ocr 按键精灵插件 字库制作工具

delphi 写的 ocr 按键精灵识字插件 附带有 字库制作工具

很不错的一个delphi 第三方美化控件

一个很不错的delphi 美化控件,平时开发的程序界面,对美观性没太大要求,但是到公司以后,才发现,顾客就是上帝,不仅要功能完善,而且也要界面清爽。无奈,只能找个美化控件来用看看。 这个是从互联网整理后,自己测试可以用的一个感觉不错的插件哦。

Delphi Open Tools API - Simple Wizard

    之前向大家简单的介绍了Open Tools API,现在我们就要亲自动手编写一个简单的Wizard,来体验Open Tools API的魅力所在。     在Delphi6中,不再推荐大家使用ExptIntf单元中的TIExpert类做为我们自己编写的Wizard的基类,而是改用TInterfacedObject做为其基类,并实现ToolsAPI单元中的一个或我个接口。    编写

Chris Mao的专栏 2358

基于STM32F407的立创球形六足双形态机器人:从Morphex复刻到毕业设计的完整开发指南

本文详细介绍了基于STM32F407主控芯片,从零开始复刻Morphex球形六足双形态机器人的完整开发过程。内容涵盖硬件选型(如总线舵机)、机械结构设计(阿基米德螺旋底盘)、软件控制(逆运动学与步态算法)以及多控制方式集成,为嵌入式系统与机器人开发的毕业设计或爱好者提供了全面的实战指南。

weixin_35414260的博客 322
上一篇: Delphi Open Tools Api实例研究(一)
下一篇: 我观MIDAS
wangphoenix
博客等级 码龄24年 3粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值