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

C++ Builder 動態建立選單與事件處理

     編輯:關於C++

執行期依檔案動態產生彈出選單

範例展示掃描指定資料夾下的 .txt 檔案,動態建立 TPopupMenu 項目,並共用同一個 OnClick 事件處理函數,點選後在 TRichEdit 顯示檔案內容。

標頭檔關鍵宣告

private:
    POINT MousePos; // 儲存滑鼠位置
    int PopCount;   // 選單項目數
    void __fastcall MyClick(TObject *Sender); // 共用點擊事件

按鈕點擊建立選單

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    // 清除舊選單項目
    for (int i = PopCount - 1; i >= 0; i--)
        PopupMenu1->Items->Delete(i);

    TSearchRec Sr;
    TMenuItem *NewItem;
    GetCursorPos(&MousePos); // 取得目前滑鼠位置

    if (FindFirst("C:\\Program Files\\3LTyping\\data\\*.txt", 0, Sr) == 0) {
        do {
            NewItem = new TMenuItem(PopupMenu1);
            int len = Sr.Name.Length();
            Sr.Name.SetLength(len - 4); // 移除 .txt
            NewItem->Caption = Sr.Name;
            PopupMenu1->Items->Add(NewItem);
            NewItem->OnClick = MyClick; // 指定共用事件
        } while (FindNext(Sr) == 0);
        FindClose(Sr);
    }
    PopCount = PopupMenu1->Items->Count;
    PopupMenu1->Popup(MousePos.x, MousePos.y); // 在滑鼠處彈出
}

共用點擊事件顯示檔案

void __fastcall TForm1::MyClick(TObject *Sender)
{
    Form1->Caption = ((TMenuItem*)Sender)->Caption;
    RichEdit1->PlainText = true;
    RichEdit1->Lines->LoadFromFile(
        "C:\\Program Files\\3LTyping\\data\\" +
        ((TMenuItem*)Sender)->Caption + ".txt");
}

FormCreate 初始化

void __fastcall TForm1::FormCreate(TObject *Sender)
{
    PopCount = 0;
}

重點技巧

  • 動態建立 TMenuItem 時指定 Owner (如 PopupMenu1),由 Owner 負責釋放記憶體。
  • 所有動態項目共用同一事件處理函數,透過 Sender 參數判斷來源。
  • 同樣原理可應用於 MainMenu 等其他選單元件。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved