程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 玩轉BCB的IDE 體驗ToolsAPI

玩轉BCB的IDE 體驗ToolsAPI

編輯:vc教程

大多數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;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved