首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

玩轉 C++ Builder IDE:運用 ToolsAPI 客製化選單與實現中文化

     編輯:關於C++

C++ Builder(BCB)的 IDE 本身就是一個巨大的 VCL 應用程式,透過 ToolsAPI 即可在設計階段存取並修改 IDE 的元件、選單、編輯器等物件。本文示範如何撰寫一個設計時套件,動態列舉主選單項目、匯出至 INI 檔、並載入中文化字串替換原始英文標題,達到 IDE 介面中文化的效果。

核心架構:設計時套件與 INTAServices

  • 專案類型:Package(.bpl),非一般執行檔。
  • 進入點:Register() 函數,IDE 載入套件時自動呼叫。
  • 介面取得:BorlandIDEServices->QueryInterface(__uuidof(INTAServices), ...) 取得 _di_INTAServices 介面,進而存取 MainMenu、ComponentCount 等 IDE 內部物件。

主要程式碼結構解析

1. 遞迴列舉選單項目並寫入 INI

void __fastcall EnumerateMenuItem(TMenuItem* MenuItem)
{
    DoMenuItem(MenuItem);               // 處理單一項目
    for (int i = 0; i < MenuItem->Count; ++i)
        EnumerateMenuItem(MenuItem->Items[i]); // 遞迴處理子項目
}

DoMenuItem 可選擇將可見屬性設為 true、將 Name 與 Caption 寫入 INI(NeedWriteToIni 旗標控制)。

2. 從中文化 INI 讀取並套用至選單

void __fastcall LocalizeAppMenu()
{
    _di_INTAServices IDE;
    if (SUCCEEDED(BorlandIDEServices->QueryInterface(__uuidof(INTAServices), (void**)&IDE))) {
        TComponent* AppBuilder = IDE->MainMenu->Owner; // IDE 主表單
        TStringList *sections = new TStringList, *idents = new TStringList;
        try {
            chsini->ReadSections(sections);
            for (int s = 0; s < sections->Count; ++s) {
                chsini->ReadSection(sections->Strings[s], idents);
                for (int i = 0; i < idents->Count; ++i) {
                    AnsiString val = chsini->ReadString(sections->Strings[s], idents->Strings[i], "NULL");
                    if (val != "NULL") {
                        TMenuItem* mi = dynamic_cast<TMenuItem*>(AppBuilder->FindComponent(idents->Strings[i]));
                        if (mi) mi->Caption = val; // 直接替換標題
                    }
                }
            }
        } __finally { delete idents; delete sections; }
    }
}

3. Register() 入口函數完整流程

  1. 建立 TIniFile 物件指向專案目錄下的 .ini(原始備份)與 CHS.ini(中文化資料)。
  2. 若 NeedLocalize 為真,呼叫 LocalizeAppMenu() 套用中文化。
  3. 取得 INTAServices,透過 AppBuilder->ComponentCount 尋找 TMainMenu。
  4. 遍歷主選單各頂層項目,依 NeedWriteToIni 決定是否匯出原始標題至 INI。

中文化資料檔範例(BCBCHS.ini)

[FileMenu]
FileMenu=檔案(&F)
FileNewItem=新增(&N)...
FileOpenItem=開啟舊檔(&O)...
FileSaveItem=儲存(&S)
...

[EditMenu]
EditMenu=編輯(&E)
EditUndoItem=復原(&U)
EditCopyItem=複製(&C)
...

[ProjectMenu]
ProjectMenu=專案(&P)
ProjectCompileItem=編譯(&C)
ProjectBuildItem=建置(&B)
...

格式為 [選單名稱] 區段,鍵值對應元件 Name 與中文 Caption。分隔線項目以 - 表示。

已知限制與注意事項

  • 資料庫選單無效:原文作者註明 DatabaseMenu 相關項目無法生效,可能因動態建立或權限限制。
  • 版本相容性:範例針對 BCB 5.0 撰寫,不同版本 IDE 內部元件名稱可能不同,需實測調整。
  • 套件安裝:編譯產生的 .bpl 需放入 IDE Bin 目錄或透過 Component | Install Packages 載入。

擴充應用方向

掌握 ToolsAPI 後,可進一步實作:

  • 自訂程式碼範本、專案精靈
  • 編輯器語法高亮、鍵盤快速鍵重新綁定
  • 專案建置事件攔截、自動化重構工具
  • 整合版本控制、靜態分析外掛

結語

透過 ToolsAPI 操作 IDE 物件模型,開發者能將 BCB 打造為符合團隊習慣的專屬開發環境。中文化選單只是冰山一角,更多客製化潛力等待發掘。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved