首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

C++ Builder 實作選單顯示最近開啟檔案列表

     編輯:VC 教學

在 Windows 環境下實作選單中的歷史檔案記錄

現代應用程式普遍具備「最近開啟檔案」功能,讓使用者能快速存取先前使用過的文件。這項技術早已成為擁有檔案選單之應用程式的標準配備,如 WPS 與 Office 系列。在 DOS 年代,程式設計師通常透過建立文字檔記錄檔案清單;但在 Windows 環境下,利用登錄機制則是更優雅的解決方案。本文將示範如何運用 C++ Builder 5.0 的 TRegistry 類別,在登錄中實作歷史檔案列表功能。

開發環境與元件配置

首先建立新專案 Project1,在 Form1 上放置以下元件:

  • TOpenDialog,名稱為 OpenDialog1
  • TMainMenu,名稱為 MainMenu1

在 MainMenu1 中新增選單項目,屬性設定為:Name: Items1、Caption: 開啟檔案。

表單類別宣告 (Unit1.h)

private:
    TRegistry *Registry;
    String Items[3];  // 儲存歷史檔案路徑的陣列
    int ItemsCount;
    void __fastcall Display();  // 更新選單顯示

開啟檔案點擊事件

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 = ItemsCount - 1; i > 0; i--)
            Items[i] = Items[i - 1];  // 將舊紀錄往後推
        Items[0] = Files;  // 最新開啟的檔案置於最前
    }
    Display();
}

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);
    }
}

表單顯示時從登錄讀取紀錄

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");
    ItemsCount++;
    Items[1] = Registry->ReadString("Item2");
    ItemsCount++;
    Items[2] = Registry->ReadString("Item3");
    ItemsCount++;
}

表單關閉時寫入登錄

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]);
}

程式已在 Windows 98 與 C++ Builder 5.0 環境下測試通過。同樣的 TRegistry 技術也常用於自動儲存視窗大小、記住使用者密碼等功能,有興趣的讀者不妨自行嘗試。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved