全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2075
推到 Plurk!
推到 Facebook!

[轉貼 技術文章] 如何在C++ Builder環境中實現在選單中顯示歷史文件列表

 
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-06-13 09:07:44 IP:61.220.xxx.xxx 未訂閱
如何在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在注冊表中實現的。有興趣的讀者可以試一試。 摘自《賽迪網》 孫航東/文
系統時間:2017-10-19 19:04:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!