解決程式中Registry和Ini File的需求 - TReg與TIni元件 |
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
http://pwipwi.myweb.hinet.net/vclex.zip 每個程式幾乎都會用到Registry或Ini檔來儲存程式資訊。
不過使用TRegistry、TRegIniFile、TIniFile還是有一些不方便的地方
除了介面不一之以外,使用時還要記有那些型態,Registry還要指定位置。
因此我包裝了一個TReg和TIni來方便使用。在使用上方便許多,而且還可以
將整個VCL元件存到Registry和Ini檔,方便作狀態保留。 以下是使用的例子: 將package安裝後,在Additional頁中會出現TIni和TReg的圖示
以使用Registry為例: 1.拉一個TReg和一個TEdit到Form裡。
2.在OnCreate裡加入GET_REG(Edit1);
3.在OnClose裡加入PUT_REG(Edit1); 這樣就完成了。將程式Compile後就可以測試看看,不論你輸入什麼字在Edit裡,
關閉後再開啟以後之前的字還是會在。而且如果你動態改變Edit的大小或位置,
同樣也是可以保留。 元件的狀態保留是我最常用的,比如你可以完全保留一個ListView的狀態在Registry
或Ini檔中。尤其是ListView的欄位寬度,使用者會有自已喜歡的寬度分配。
同樣用一個GET_REG和PUT_REG程式碼就可以取出和儲存。其他元件都會幫你完成。 變數的儲存是最基本的功能,同樣也是用GET_REG和PUT_REG就可以完成,一般我會在
OnCreate時呼叫GET_REG,在OnClose時呼叫PUT_REG。以下是可以用的變數型態和使用例子:
//--------------------------------------------------------------------------- int IntValue; long LongValue; unsigned int UIntValue; double DoubleValue; AnsiString StringValue; bool BoolValue; TStrings* TStringsData = new TStringList; void __fastcall TForm1::FormCreate(TObject *Sender) { GET_REG(IntValue); GET_REG(LongValue); GET_REG(UIntValue); GET_REG(DoubleValue); GET_REG(StringValue); GET_REG(BoolValue); GET_REG(TStringsData); GET_REG(Edit1); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { PUT_REG(IntValue); PUT_REG(LongValue); PUT_REG(UIntValue); PUT_REG(DoubleValue); PUT_REG(StringValue); PUT_REG(BoolValue); PUT_REG(TStringsData); PUT_REG(Edit1); delete TStringsData; } //---------------------------------------------------------------------------這些Registry的資料都會自動放在 HKEY_CURRENT_USER\Software\YourProgramName\Main 而YourProgramName當然就是你程式的名稱了。 如果你是用TIni元件和GET_INI和PUT_INI的話, 資料則是放在和程式相同目錄下的YourProgramName.ini 另外是一些使用的例子,方便大家Copy用: //--------------------------------------------------------------------------- // 例一:自動儲存檔案開啟位置。 //--------------------------------------------------------------------------- 每次開檔都還要一再叫使用者開同樣的目錄嗎? 以下例子可以保留使用者開檔後的位置 void __fastcall TForm1::Button2Click(TObject *Sender) { GET_REG(OpenDialog1->FileName) if(OpenDialog1->Execute()) { PUT_REG(OpenDialog1->FileName) // 放入你的開檔的程式碼 } } //--------------------------------------------------------------------------- // 例二:保留程式的長寬 //--------------------------------------------------------------------------- 在OnCreate裡加入 GET_REG(Width); GET_REG(Height); 在OnClose裡加入 PUT_REG(Width); PUT_REG(Height); 同理也可以保留程式的位置//--------------------------------------------------------------------------- // 以下是你可能會問的: //--------------------------------------------------------------------------- 1.如果Registry一開始沒有資料,GET_REG或GET_INI會不會出問題? 如果一開始沒有Registry或Ini檔,則GET_REG或GET_INI則不做任何事, 保留變數的數值。你可以先給變數初值,當Registry沒有資料時,就會用到這個初值 例如: Caption = "First Time Running..."; // 一開始的初值 GET_REG(Caption); //如果Registry沒有資料,Caption還是"First Time Running..."2.機碼的名稱是什麼?可以自已指定嗎? 機碼的名稱就是你傳給PUT_REG的變數名字。如果要自已指定位置,可以用 PUT_REG_AT,GET_REG_AT 例如: PUT_REG_AT("CustomName",ListBox1); GET_REG_AT("CustomName",ListBox1); 3.如果消除存放變數的Registry資料 使用ERASE_REG(); 4.在其他Form中可以再拉一個TReg元件嗎?如果同時有兩個TReg元件資料是不同的嗎? 程式不論放多少個TReg元件,資料都是在同一個位置。 發表人 - pwipwi 於 2004/12/21 02:04:48 |
sw0324
一般會員 發表:0 回覆:2 積分:0 註冊:2004-10-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |