C++BUILDER動態建立選單及選單事件
阿新 • • 發佈:2019-02-04
#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;//初始化
}
#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;//初始化
}