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

解決程式中Registry和Ini File的需求 - TReg與TIni元件

 
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-21 01:56:23 IP:211.76.xxx.xxx 未訂閱
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-02-21 14:08:58 IP:202.111.xxx.xxx 未訂閱
我在大陆,不能下载你的连接,不知能否把它上载到这个网站。 谢谢!
系統時間:2024-11-24 3:37:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!