转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
Delphi Open Tools Api实例研究(二)         ★★★★

Delphi Open Tools Api实例研究(二)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1517 更新时间:2009/4/23 18:36:41

Delphi Open Tools Api实例研究(二)

先行知识: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;

  //设置dllhost 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));

[1] [2]  下一页


[办公软件]Word编程之WindowActivate、DocumentOpen和Docume…  [电脑技术]HP打印复印机出现Jam  in  print  pager path和op…
[系统软件]InstallShield Express for delphi制作安装程序定…  [系统软件]OPEN SERVER 5.0.5安装EXP300阵列柜
[常用软件]InstallShield Express制作Delphi数据库安装程序  [常用软件]Open Desktop 开放着 美丽着
[常用软件]族门新秀:ACD mPower Tools  [常用软件][媒体]虚拟光驱Daemon Tools实用教程
[Delphi程序]为什么选择Delphi.Net ?  [Delphi程序]《关于VisiBroker For Delphi的使用》(4)
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台