[轉貼 技術文章] 如何在C++ Builder環境中實現在選單中顯示歷史文件列表 |
|
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
如何在C++ Builder環境中實現在選單中顯示歷史文件列表
=====================================================================
2000-08-16 14:10:58 摘自《賽迪網》 孫航東/文 本文介紹了如何在Windows環境下實現選單中顯示歷史文件列表﹐同時概要介紹了TRegistry類的使用方法。 現在﹐在許多Windows應用程序都具有這樣一個功能﹕可以在文件選單下面顯示列出最近使用過的文件﹐這使用戶很容易再次使用曾經使用過的文件。在過去幾年中﹐這項技術已成為擁有文件選單項目的應用程式的共同特色﹕如Wps系列和Office系列。在以前的DOS環境中﹐程式設計人員一般通過建立一個文件用來記錄文件表列﹔那麼在Windows環境中﹐還有其他的方法嗎﹖最近筆者利用C++ Builder5.0 C/S版提供的TRegedit類成功在 Registry 中達成上述功能﹐現在介紹如下: 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=ItemsCount-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
{ 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); //在Registry Table中打開Master Key﹐如果該Master Key不存在則新建該Master Key// 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]字符串的值// } 以上程式在 Win98﹑C Builder5.0環境中通過。 其實許多程式的其他功能﹐如﹕自動保存程式From大小﹑自動記憶使用者Command﹑也是利用 TRegedit在注冊表中實現的。有興趣的讀者可以試一試。 摘自《賽迪網》 孫航東/文
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |