?? unit1.cpp
字號:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <stdlib.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ReadMenuFile(AnsiString fname)
{
TFileStream *sm;
int ii,nn;
TMenuItem *mitem,*curitem;
AnsiString name,value;
//清除菜單
nn=MainMenu1->Items->Count;
for(ii=0;ii<nn;ii++)
delete MainMenu1->Items->Items[ii];
//讀取菜單文件
try
{
sm=new TFileStream(fname,fmOpenRead); //以只讀方式打開文本菜單文件
mitem=MainMenu1->Items;
curitem=mitem;
for(;;) //循環讀取文件內容
{
name=ReadName(sm); //讀取Name=Value格式的Name
value=ReadValue(sm); //讀取Name=Value格式的Value
if((name=="")||(name=="End"))break; //如果讀到了結束代碼,跳出循環
name=name.UpperCase(); //將Name全變為大寫字符
if(name=="MENU") //菜單代碼
{
value=value.UpperCase();
if(value=="MAIN") //是主菜單嗎
{
curitem=MainMenu1->Items;
}
else if(value=="SUBMENU") //是子菜單嗎
{
curitem=mitem;
}
else if(value=="EXITSUB") //該退出子菜單嗎
{
curitem=curitem->Parent;
}
else{}
}
else if(name=="NAME") //是菜單名稱嗎
{
mitem=new TMenuItem(this); //新建一個菜單項
mitem->Caption=value;
curitem->Add(mitem); //加入當前菜單項中
}
else if(name=="KEY") //是鍵值嗎
{
mitem->Tag=atoi(value.c_str()); //用菜單項的Tag屬性保存
mitem->OnClick=MItemClick; //讓每一菜單項的Click事件指向同一操作
}
else if(name=="ALIAS") //菜單項的別名
{
mitem->Caption=value;
}
else if(name=="VISIBLE") //菜單項可見嗎
{
mitem->Visible=False;
}
else if(name=="ENABLED") //菜單項激活嗎
{
mitem->Enabled=False;
}
else{}
}
}
__except(EXCEPTION_EXECUTE_HANDLER)//異常處理
{
Application->MessageBox("不能打開菜單文件!","提示",MB_OK);
}
delete sm; //刪除已分配的sm流
}
//---------------------------------------------------------------------------
AnsiString ReadName(TStream *sm)
{
int nn;
AnsiString ass;
char ss[2];
ass="";
ss[1]=0;
for(;;)
{
nn=sm->Read(ss,1);
if(nn!=1)break;
if((ss[0]=='=')||(ss[0]==0x0d)||(ss[0]==0x0a))
{
if(ass!="")break;
}
else
{
ass=ass+ss;
}
}
return ass;
}
//---------------------------------------------------------------------------
AnsiString ReadValue(TStream *sm)
{
int nn;
AnsiString ass;
char ss[2];
ass="";
ss[1]=0;
for(;;)
{
nn=sm->Read(ss,1);
if(nn!=1)break;
if(ss[0]==0x0a)
{
break;
}
else
{
if(ss[0]!=0x0d)
ass=ass+ss;
}
}
return ass;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MItemClick(TObject *Sender)
{
TMenuItem *mitem;
int key;
mitem=(TMenuItem *)Sender;
key=mitem->Tag;
ShowMessage(IntToStr(key));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ReadMenuFile("TestMenu.Txt");
}
//---------------------------------------------------------------------------
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -