Unit1.cpp
上传用户:lhxd_sz
上传日期:2014-10-02
资源大小:38814k
文件大小:4k
源码类别:

VC书籍

开发平台:

C++ Builder

  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include <stdlib.h>
  4. #pragma hdrstop
  5. #include "Unit1.h"
  6. //---------------------------------------------------------------------------
  7. #pragma package(smart_init)
  8. #pragma resource "*.dfm"
  9. TForm1 *Form1;
  10. //---------------------------------------------------------------------------
  11. __fastcall TForm1::TForm1(TComponent* Owner)
  12.         : TForm(Owner)
  13. {
  14. }
  15. //---------------------------------------------------------------------------
  16. void __fastcall TForm1::ReadMenuFile(AnsiString fname)
  17. {
  18.   TFileStream *sm;
  19.   int ii,nn;
  20.   TMenuItem *mitem,*curitem;
  21.   AnsiString name,value;
  22. //清除菜单
  23.   nn=MainMenu1->Items->Count;
  24.   for(ii=0;ii<nn;ii++)
  25.     delete MainMenu1->Items->Items[ii];
  26. //读取菜单文件
  27.   try
  28.   {
  29.     sm=new TFileStream(fname,fmOpenRead); //以只读方式打开文本菜单文件
  30.     mitem=MainMenu1->Items;
  31.     curitem=mitem;
  32.     for(;;) //循环读取文件内容
  33.     {
  34.       name=ReadName(sm); //读取Name=Value格式的Name
  35.       value=ReadValue(sm); //读取Name=Value格式的Value
  36.       if((name=="")||(name=="End"))break; //如果读到了结束代码,跳出循环
  37.       name=name.UpperCase(); //将Name全变为大写字符
  38.       if(name=="MENU") //菜单代码
  39.       {
  40.         value=value.UpperCase();
  41.         if(value=="MAIN") //是主菜单吗
  42.         {
  43.           curitem=MainMenu1->Items;
  44.         }
  45.         else if(value=="SUBMENU") //是子菜单吗
  46.         {
  47.           curitem=mitem;
  48.         }
  49.         else if(value=="EXITSUB") //该退出子菜单吗
  50.         {
  51.           curitem=curitem->Parent;
  52.         }
  53.         else{}
  54.       }
  55.       else if(name=="NAME") //是菜单名称吗
  56.       {
  57.         mitem=new TMenuItem(this); //新建一个菜单项
  58.         mitem->Caption=value;
  59.         curitem->Add(mitem); //加入当前菜单项中
  60.       }
  61.       else if(name=="KEY") //是键值吗
  62.       {
  63.         mitem->Tag=atoi(value.c_str()); //用菜单项的Tag属性保存
  64.         mitem->OnClick=MItemClick; //让每一菜单项的Click事件指向同一操作
  65.       }
  66.       else if(name=="ALIAS") //菜单项的别名
  67.       {
  68.         mitem->Caption=value;
  69.       }
  70.       else if(name=="VISIBLE") //菜单项可见吗
  71.       {
  72.         mitem->Visible=False;
  73.       }
  74.       else if(name=="ENABLED") //菜单项激活吗
  75.       {
  76.         mitem->Enabled=False;
  77.       }
  78.       else{}
  79.     }
  80.   }
  81.   __except(EXCEPTION_EXECUTE_HANDLER)//异常处理
  82.   {
  83.     Application->MessageBox("不能打开菜单文件!","提示",MB_OK);
  84.   }
  85.   delete sm; //删除已分配的sm流
  86. }
  87. //---------------------------------------------------------------------------
  88. AnsiString ReadName(TStream *sm)
  89. {
  90.   int nn;
  91.   AnsiString ass;
  92.   char ss[2];
  93.   ass="";
  94.   ss[1]=0;
  95.   for(;;)
  96.   {
  97.     nn=sm->Read(ss,1);
  98.     if(nn!=1)break;
  99.     if((ss[0]=='=')||(ss[0]==0x0d)||(ss[0]==0x0a))
  100.     {
  101.       if(ass!="")break;
  102.     }
  103.     else
  104.     {
  105.       ass=ass+ss;
  106.     }
  107.   }
  108.   return ass;
  109. }
  110. //---------------------------------------------------------------------------
  111. AnsiString ReadValue(TStream *sm)
  112. {
  113.   int nn;
  114.   AnsiString ass;
  115.   char ss[2];
  116.   ass="";
  117.   ss[1]=0;
  118.   for(;;)
  119.   {
  120.     nn=sm->Read(ss,1);
  121.     if(nn!=1)break;
  122.     if(ss[0]==0x0a)
  123.     {
  124.       break;
  125.     }
  126.     else
  127.     {
  128.       if(ss[0]!=0x0d)
  129.         ass=ass+ss;
  130.     }
  131.   }
  132.   return ass;
  133. }
  134. //---------------------------------------------------------------------------
  135. void __fastcall TForm1::MItemClick(TObject *Sender)
  136. {
  137.   TMenuItem *mitem;
  138.   int key;
  139.   mitem=(TMenuItem *)Sender;
  140.   key=mitem->Tag;
  141.   ShowMessage(IntToStr(key));
  142. }
  143. //---------------------------------------------------------------------------
  144. void __fastcall TForm1::Button1Click(TObject *Sender)
  145. {
  146.  ReadMenuFile("TestMenu.Txt");
  147. }
  148. //---------------------------------------------------------------------------