玩转BCB的IDE 体验ToolsAPI

大多数BCB程序员也许一辈子都不用关心Toolsapi,但如果象我一样无聊的话,

不妨玩玩和讨论一下:

看看下面的程序,来把IDE变个样:

--->BCB5。0

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
USERES("nodebug.res");
USEPACKAGE("vcl50.bpi");
//---------------------------------------------------------------------------
#include <toolsapi.hpp>
#include <inifiles.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
// Package source.
//---------------------------------------------------------------------------
namespace Nodebug // Here the namespace should be same with this file name.
{
   bool NeedLocalize = true;
   bool NeedWriteToIni = false;
   TIniFile *ini, *chsini;
   AnsiString Section, Ident, Value;
   //===[ Do something on MenuItems. ]======================================
   void __fastcall DoMenuItem(TMenuItem* MenuItem)
   {
     //Display all MenuItems.
     if(MenuItem->Visible==false) MenuItem->Visible = true;
     if ( NeedWriteToIni && !MenuItem->Name.IsEmpty())
     {
       Ident = MenuItem->Name;
       Value = MenuItem->Caption;
       ini->WriteString ( Section, Ident, Value );
     }
   }
   //===[ Do something on MenuItems. ]======================================
   //===[ Enumerate all MenuItem's SubItems. ]==============================
   void __fastcall EnumerateMenuItem(TMenuItem* MenuItem)
   {
     DoMenuItem(MenuItem);
     for ( int i=0; i<MenuItem->Count; i++ )
     {
       EnumerateMenuItem(MenuItem->Items[i]);
     }
   }
   //===[ Enumerate all MenuItem's SubItems. ]==============================
   void __fastcall LocalizeAppMenu()
   {
     _di_INTAServices IDE;
     HRESULT hr = BorlandIDEServices->QueryInterface(__uuidof(INTAServices), (void **) &IDE);
     if (SUCCEEDED(hr))
     {
      //----------[AppBuilder macro start]--------------------------------------
      #ifndef AppBuilder
      #define AppBuilder IDE->MainMenu->Owner
      #endif
      //----------[AppBuilder macro end ]--------------------------------------
       TStringList* SectionList = new TStringList;
       TStringList* IdentList = new TStringList;
       AnsiString Value , Default("NULL");
       try
       {
         chsini->ReadSections(SectionList);
         for (int i = 0; i < SectionList->Count; i++)
         {
           chsini->ReadSection( SectionList->Strings[i], IdentList);
           for (int x = 0; x < IdentList->Count; x++)
           {
             Value = chsini->ReadString( SectionList->Strings[i],
                     IdentList->Strings[x],
                     "NULL");
             if( Default != Value )
             {
               TMenuItem* MI = dynamic_cast<TMenuItem*>
                 (AppBuilder->FindComponent(IdentList->Strings[x]));
               if(MI != NULL) MI->Caption = Value;
             }
           }
         }
       }
       #undef AppBuilder
       __finally
       {
         delete IdentList;
         delete SectionList;
       }
     }
   }
   //===[ BPL's 'Main' function or Entry Function. ]========================
   void __fastcall PACKAGE Register()
   {
     ini = new TIniFile(ChangeFileExt( Application->ExeName, ".INI" ));
     chsini = new TIniFile(ChangeFileExt( Application->ExeName, "CHS.INI" ));
     if( NeedLocalize ) LocalizeAppMenu();
     _di_INTAServices IDE;
     HRESULT hr = BorlandIDEServices->QueryInterface(__uuidof(INTAServices), (void **) &IDE);
     if (SUCCEEDED(hr))
     {
      //----------[AppBuilder macro start]--------------------------------------
      #ifndef AppBuilder
      #define AppBuilder IDE->MainMenu->Owner
      #endif
      //----------[AppBuilder macro end ]--------------------------------------
      for ( int i = 0; i<AppBuilder->ComponentCount; i++ ) // ComponentCount = 409
      {
         if ( AppBuilder->Components[i]->ClassNameIs("TMainMenu") ) // MainMenu1
         {
           //----------[AppMainMenu macro start]--------------------------------------
           #ifndef AppMainMenu
           #define AppMainMenu dynamic_cast<TMainMenu*>( AppBuilder->Components[i])
           #endif
           //----------[AppMainMenu macro end ]--------------------------------------
           for ( int x = 0; x < AppMainMenu->Items->Count; x++ ) //count 11
           {
              if(NeedWriteToIni) Section = AppMainMenu->Items->Items[x]->Name;
              EnumerateMenuItem(AppMainMenu->Items->Items[x]);
           }//for finished.
           #undef AppMainMenu
         }//if finished.
      }//for finished
      #undef AppBuilder
     }
     else ShowMessage("Error:I Can't Access IDE.\nYou'd better unload this module.");
     delete ini;
     delete chsini;
   }
   //===[ BPL's 'Main' function or Entry Function. ]========================
}//namespace finished.
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
  return 1;
}

时间: 2024-11-02 06:32:10

玩转BCB的IDE 体验ToolsAPI的相关文章

玩转BCB的IDE,体验ToolsAPI

大多数BCB程序员也许一辈子都不用关心Toolsapi,但如果象我一样无聊的话, 不妨玩玩和讨论一下: 看看下面的程序,来把IDE变个样: --->BCB5.0 //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop USERES("nodebug.res"); USEPACKAGE("vcl5

Visual Studio 2013引入联网IDE体验 自动同步设备

近日,Visual Studio 2013以 Visual Studio 2012 和后续的 Visual Studio 更新中的进展为基础构建而成,为开发团队提供需要的解决方案,使其接纳这种转变并开发和交付利用下一波 Windows 平台创新 (Windows 8.1) 的新式应用程序,同时在所有 Microsoft 平台上支持多种设备和服务.设备和服务体验有了根本性的变革,改变了行业对软件开发的处理方式.消费者.客户和员工现在需要一种全新的应用程序.他们要求应用程序在多种屏幕和设备上提供最佳

傲游云浏览器:玩转跨设备云中体验

步入移动互联网时代,多数 网友均拥有2个至多个智能终端设备,不同设备会应用在不同的场景,但终端之间资料及信息的同步和分享成为大问题,如何借助第三方功能将不同终端 无缝连接?傲游云浏览器给了我们一个绝佳的解决方案.傲游云浏览器 Android平台4.0.4.1000版本日前已经发布,新版本在原有产品上完善了云功能的体验,让设备间的无缝连接更加顺畅.下面就让小编带领大家体验一下傲游云浏览器带来的独有云功能魅力吧.(图1)傲游云浏览器Android平台4.0.4.1000版本跨终端云推送云推送是傲游云

QQ邮箱玩截屏 让你体验不同的感觉

撰写邮件时,常常需要在正文部分 插入一些图片,用添加附件的方法比较麻烦, 其实利用http://www.aliyun.com/zixun/aggregation/6880.html">QQ邮箱的截屏功能,就可以很方便的在邮件需要的位置插入图片. 进入QQ邮箱,单击顶部的"设置",在新界面中,单击"写信与签名",然后单击"安装QQ邮箱截屏控件",单击浏览器的阻止提示信息栏,选择"安装 ActiveX 控件"(见图

Borland C++ Builder专题

BCB中如何给Table减肥 C++ Builder开发经验几则 C++ Builder在运行时创建BDE别名 C++ Builder常用代码片断 C++ Builder实现在线接收电子邮件 C++ Builder动态设定odbc数据源 如何利用C++ Builder实现对Excel97 的调用 BCB创建基于Internet的点对点Chat 用C++ Builder开发Web程序 用BCB开发多层数据库应用程序 用C++ Builder编写自已的IE SKIN 用BCB5的打包程序打包BCB6

从百度竞价排名谈百度搜索的用户体验

身处在中国如今的互联网环境中,众多的SEOer都可谓苦不堪言,一家独大的模式让许多依赖搜索引擎的网站只有选择百度,网站从设计到规划到内容部署都严格按照百度的要求来做,就形成了大部分网站的风格雷同,网站内容神似的现象,以往的"百度一下,你就知道"现在则变成了"百度一下,你也不知道". 今天,笔者就要谈谈百度到底是在跟站长玩还是在跟用户玩,它的用户体验真的就像自己声明的那样越来越好吗? 因为临近十一,恰好笔者所处的武汉又出台新政策,法定节假日高速过路不收费.自然而然,武

扩展DelphiXE IDE白皮书

扩展DelphiXE IDE白皮书         原著:Bruno Fierens 翻译: 帅宏军(shuaihj@163.com)   前言 Delphi提供了丰富的API,使开发人员能够在许多方面自定义和扩展IDE.本白皮书的目的是介绍这些API,并提供了很多关于如何使用它们的例子.在这些例子中有一些是TMS软件所提供的免费IDE扩展.这些用来扩展IDE的API受OTAPI的保护,OTAPI是Open Tools API的缩写.本白皮书中的例子已用Delphi XE编码和测试通过. 附加信

换脸上阵的路由界新面孔,联想云路由动手玩

     "联想牌"路由器?是的,你没听错.这是联想在"PC+"战略的又一次扩展,官方在今年4月末宣布即将推出首台智能路由器"联想云路由",在经历两周左右的内测后,雷锋网在今天收到了这款产品. 在动手玩之前,我们需要先了解下小编玩过后的一些背景资料.这款"联想云路由"并非联想自家研发的产品,而是由成都一家名为"谛听科技"的公司OEM,直接在谛听的最新产品"如意云二代"上贴牌.所以这款的动

苹果体验店iPhone售后服务的若干思考

中介交易 SEO诊断 淘宝客 云主机 技术大厅 2012年6月入手白色4S,至此半年期间各种苦逼的事情,也真心感受到了"不是我们在玩iPhone,是iPhone在玩我们." 苹果体验店 好吧,吐槽完毕.现在不带情绪,理智的和大家谈谈我对iPhone在售后服务中的一些思考. 1.退换货 苹果公司承诺7天无条件退换货,15天换货.我是在苏宁易购买的,在取货后第5天没忍心去退掉4S.到第8天,实在扛不住了.拨通了苹果售后电话.苹果中国的售后呼叫中心在广州,由他们那边统一呼叫转移.告知我可以到