1. 程式人生 > >C++BUILDER動態建立選單及選單事件

C++BUILDER動態建立選單及選單事件

#include
#pragma hdrstop

#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
for(int i=PopCount-1;i>=0;i--) file://如果PopupMenu1裡面有選單項
PopupMenu1->Items->Delete(i); file://就刪除,以免重複建立

TSearchRec Sr;//用來反迴文件名
TMenuItem *NewItem;
GetCursorPos(&MousePos);//把當前的滑鼠位置儲存在MousePos裡
int MenuNameLength;//選單名的長度

if(FindFirst("C://Program Files//3LTyping//data//*.txt",0,Sr)==0)

{
file://取得第一個符合條件的檔名;

file://TXT檔案的位置,可自己設定;

NewItem=new TMenuItem(PopupMenu1); file://建立選單
MenuNameLength=Sr.Name.Length(); file://檔名的長度
Sr.Name.SetLength(MenuNameLength-4); file://去除“.TXT”
NewItem->Caption=Sr.Name; file://新建選單的名字
PopupMenu1->Items->Add(NewItem); file://把新建選單項加到PopupMenu1裡
NewItem->OnClick=MyClick; file://把自己定義的MyClick函式復給新選單的

file://OnClick單擊事件


file://查詢下一個符合條件的檔名,直到完

while(FindNext(Sr)==0)

{
NewItem=new TMenuItem(PopupMenu1);
MenuNameLength=Sr.Name.Length();
Sr.Name.SetLength(MenuNameLength-4);
NewItem->Caption=Sr.Name;
PopupMenu1->Items->Add(NewItem);
NewItem->OnClick=MyClick;

}


FindClose(Sr);//結事查詢

}


PopCount=PopupMenu1->Items->Count;//PopupMenu1下的選單項個數儲存
PopupMenu1->Popup(MousePos.x,MousePos.y);//在當前位置彈出PoupMenu1選單
}
{
file://下面的程式碼主要是把選定的檔案顯示在RichEdit1上

Form1->Caption=((TMenuItem*)Sender)->Caption;
RichEdit1->PlainText=true;//設為true,表示純文字檔案
RichEdit1->Lines->LoadFromFile(
"C://Program Files//3LTyping//data//"+
((TMenuItem*)Sender)->Caption+".txt");
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
PopCount=0;//初始化
}