BCB实现显示历史文件的功能

发表于:2007-07-04来源:作者:点击数: 标签:
孙航东 现在,许多 Windows 应用程序都具有在文件选单中显示历史文件的功能,这使用户很容易再次访问这些文件。笔者利用 Borland C++ Builder(BCB)提供的TRegedit类,成功地在注册表中实现了上述功能。现介绍如下: 1.在C++ Builder中新建一个工程文件project
孙航东

  现在,许多Windows应用程序都具有在文件选单中显示历史文件的功能,这使用户很容易再次访问这些文件。笔者利用Borland C++ Builder(BCB)提供的TRegedit类,成功地在注册表中实现了上述功能。现介绍如下:

  1.在C++ Builder中新建一个工程文件project1,并在Form1上添加如下控件:

  控件名称 属性 值

  TOpenDialog Name OpenDialog1

  TMainMenu Name MainMneu1

  同时在 MainMenu1控件中增加一个选单项,其属性为:

  Name Caption 

  Items1 打开文件

  2.在unit1.h中输入如下内容: 

  private:

  TRegistry ?Registry;

  String Items[3];

  //建立显示历史文件的数组

  int ItemsCount;

  void _fastcall TForm1::Display();//显示历史文件记录

  3.在Items的Click事件中输入如下内容:

   void __fastcall TForm1::Items1Click(TObject ?Sender)

   { 

   String TempFile,Files;

   OpenDialog1-〉Filter="All Files(*.*)|*.*";

   if(OpenDialog1-〉Execute())

   {

   Files=OpenDialog1-〉FileName;//取得文件名//

   for(int i=0;i〈3;i++)

   TempFile=Items[0];

   if(ItemsCount〈3)

   ItemsCount++;

   for(int i=I temsCount-1;i〉0;i--)

   Items[i]=Items[i-1];

  //对打开的历史文件进行排序

  Items[0]=Files;

  //使最近打开的文件在最前面

   }

   Display(); 

   }

  4.在unit.cpp中建立Display函数:

   void _fastcall TForm1::Display()

   {

  TMenuItem ?NewItem;

  while(MainMenu1-〉Items-〉Items[MainMenu1-〉Items-〉Count-1]-〉Count〉2)

   {

   MainMenu1-〉Items-〉Items[MainMenu1-〉Items-〉Count-1]-〉

   Delete(MainMenu1-〉Items-〉Items[MainMenu1-〉Items-〉Count-1]-〉Count-1);

  }//除去原有的历史文件列表

   for(int i=0;i〈ItemsCount;i++)

   {

   NewItem=new TMenuItem(MainMenu1);

   NewItem-〉Caption=Items[i];

   MainMenu1-〉Items-〉Items[MainMenu1-〉Items-〉Count-1]-〉Insert

   ( MainMenu1-〉Items-〉Items[MainMenu1-〉Items-〉Count-1]-〉Count,NewItem);

   }//建立新的历史文件列表

  }

   5.在Form1的Show事件中输入如下内容:

   void __fastcall TForm1::FormShow(TObject ?Sender)

   { Registry =new TRegistry;

  ItemsCount=0;

  Registry-〉RootKey=HKEY_LOCAL_MACHINE;

  Registry-〉OpenKey("SOFTWARE\\

  MYCOMPANY\\Remember",TRUE);

  //在注册表中打开主键,如果该主键不存在则新建该主键

  Items[0]=Registry-〉ReadString("Item1");

  //读items[i]字符串的值

  ItemsCount++;

  Items[1]=Registry-〉ReadString("Item2");

  ItemsCount++;

  Items[2]=Registry-〉ReadString("Item3");

  ItemsCount++; }

  6.在Form1的Show事件中输入如下内容:

  void __fastcall TForm1::FormClose(TObject ?Sender, TCloseAction &&Action)

   { if(ItemsCount〈3)

   for(int i=ItemsCount+1;i〈=3;i++)

   Items[i]="";

   Registry-〉WriteString("Item1",Items[0]);

   Registry-〉WriteString("Item2",Items[1]);

   Registry-〉WriteString("Item3",Items[2]);

   //向注册表写入items[i]字符串的值 }

  以上程序在中文Windows 98、C++ Builder 5.0环境中通过。 

原文转自:http://www.ltesting.net