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

C++ Builder 實現可移動/拖曳選單的三種方法:CoolBar、SpeedButton 與 ToolBar 整合

     編輯:關於C++

標準 MainMenu 固定於視窗頂部無法移動。若需像 Office、IE 早期版本那樣可拖曳、停靠的選單列,可採用以下三種方案,由簡單到完整依序介紹。

方法一:CoolBar + ToolBar + ToolButton + PopupMenu (簡易版)

  1. 放置 TCoolBar,其上放 TToolBar。
  2. ToolBar 設定:ShowCaptions=true、Flat=true。
  3. 新增 TToolButton,設定 Style=tbsDropDown。
  4. 加入 TPopupMenu 設定選單項。
  5. ToolButton->DropdownMenu = PopupMenu1。

缺點:選單由按鈕右側小三角觸發,非標準選單列體驗。

方法二:CoolBar + 兩個 ToolBar + SpeedButton (手寫彈出邏輯)

  1. TCoolBar 上放兩個 TToolBar (可拖曳排序)。
  2. 在「選單」ToolBar 放 TSpeedButton,Flat=true、Caption="檔案"。
  3. 加入 TPopupMenu 設定項目 (開啟、結束)。
  4. SpeedButton OnClick 彈出選單:
void __fastcall TForm1::SpeedButton1Click(TObject *Sender) {
    TPoint Pos;
    TSpeedButton *Btn = (TSpeedButton*)Sender;
    Pos = Btn->ClientToScreen(TPoint(0, 0));
    Pos.y += Btn->Height; // 顯示在按鈕下方
    PopupMenu1->Popup(Pos.x, Pos.y);
}

優點:外觀像標準選單項,位置可隨 ToolBar 拖曳移動。

方法三:ControlBar + ToolBar + MainMenu 整合 (最完整、無需寫碼)

此法利用 TControlBar 的停靠機制,將 ToolBar 按鈕直接關聯 MainMenu 項目,實現真正的可移動選單列。

  1. 放置 TControlBar (而非 CoolBar)。
  2. 其上放 TToolBar。
  3. ToolBar 上新增按鈕,數量對應主選單頂層項目數 (檔案、編輯、檢視...)。
  4. 加入 TMainMenu 正常建立選單結構。
  5. 關鍵步驟:清空表單 Menu 屬性 (設為空),不再使用標準選單列。
  6. 設定 ToolBar 屬性:
ShowCaption = true      // 顯示按鈕文字
DragKind = dkDock       // 可停靠
DragMode = dmAutomatic  // 自動拖曳
Flat = true             // 扁平外觀
EdgeBorders = []        // 移除邊框
  1. 設定每個 ToolButton 屬性:
Grouped = true      // 單選組行為
AutoSize = true     // 自動寬度
MenuItem = 對應的 MainMenu 項目 (如 FileMenu, EditMenu...)

效果對比

方法可拖曳可停靠標準選單行為程式碼量推薦場景
一否否否 (下拉式)極少簡單工具列下拉選單
二是 (隨 ToolBar)是部份 (手寫彈出)少需自訂外觀的可移動選單
三是是是 (完整關聯 MainMenu)零專業級可停靠選單列

方法三深度解析

  • 原理:ToolButton.MenuItem 關聯後,按鈕點擊自動彈出對應 MainMenu 子選單,保留快捷鍵、檢查標記、啟用狀態等所有原生行為。
  • ControlBar vs CoolBar:ControlBar 專為可停靠工具列設計,支援 dkDock;CoolBar 側重彈性佈局 (類似 IE 工具列)。
  • 視覺微調:設定 ControlBar.Color、ToolBar.Color 統一風格;ToolButton.Grouped=true 使選中項保持按下狀態。

進階:動態增減選單項

運行時操作 MainMenu 項目 (Items->Add/Delete) 即時反映到 ToolButton,無需同步修改 ToolBar。

方法三為最佳實踐:零程式碼、完整相容 MainMenu 功能、原生支援拖曳停靠,是構建專業級可自訂介面應用程式的首選方案。

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