⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.cpp

📁 有视频
💻 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 + -