C++Builder Tips


メニュー・動的に追加削除


動的にメニューを追加・削除するサンプルです。
AddMenuボタンを押すとメニューが追加され、AddMenuItemボタンを押すと最後に追加されたメニューにメニュー項目が追加されます。
Remove〜で始まるボタンは対応するAdd〜ボタンで追加された最後のメニュー(メニュー項目)を削除します。




//---------------------------------------------------------------------------
//  Unit1.h
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
  __published: // IDE 管理のコンポーネント
  TButton *Button1;
  TButton *Button2;
  TMainMenu *MainMenu1;
  TButton *Button3;
  TButton *Button4;
  void __fastcall Button1Click(TObject *Sender);
  void __fastcall Button2Click(TObject *Sender);
  void __fastcall Button3Click(TObject *Sender);
  void __fastcall Button4Click(TObject *Sender);
private:
  void __fastcall UserMenuClick(TObject * Sender); // ユーザー宣言
public: // ユーザー宣言
  __fastcall TForm1(TComponent* Owner);
};

//---------------------------------------------------------------------------
//  Unit1.cpp
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

void __fastcall TForm1::UserMenuClick(TObject * Sender)
{
  Application->MessageBox(((TMenuItem*)Sender)->Caption.c_str(),"AddMenu",MB_OK);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  //メニューの追加
  TMenuItem *NewItem = new TMenuItem(MainMenu1);

  NewItem->Caption = "新メニュー"+IntToStr(MainMenu1->Items->Count);
  NewItem->OnClick = UserMenuClick;
  MainMenu1->Items->Insert(MainMenu1->Items->Count,NewItem);//最後のメニューに追加

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
  //メニューの削除
  if (MainMenu1->Items->Count > 0){
    MainMenu1->Items->Delete(MainMenu1->Items->Count-1); //最後のメニューを削除
  }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
  //メニューの項目の追加
  TMenuItem *ToItem;
  TMenuItem *NewItem;

  if (MainMenu1->Items->Count > 0){
    ToItem = MainMenu1->Items->Items[MainMenu1->Items->Count-1];
    NewItem = new TMenuItem(ToItem);

    NewItem->Caption = "新メニュー項目"+IntToStr(ToItem->Count);
    NewItem->OnClick = UserMenuClick;
    ToItem->OnClick = NULL;
    ToItem->Insert(ToItem->Count,NewItem); //最後のメニュー項目に追加
  }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)
{
  //メニュー項目の削除
  TMenuItem *ToItem;

  if (MainMenu1->Items->Count > 0){
   ToItem = MainMenu1->Items->Items[MainMenu1->Items->Count-1];
   if (ToItem->Count > 0){
     ToItem->Delete(ToItem->Count-1); //最後のメニュー項目を削除
   }
 }
}

DownLoad bcbtips031.lzh 4KB(BCB5)