線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2618
推到 Plurk!
推到 Facebook!

TiniFile初學者問題~

尚未結案
phoenix_csie
一般會員


發表:6
回覆:15
積分:4
註冊:2005-10-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-10-11 13:36:45 IP:218.162.xxx.xxx 未訂閱
小弟稍微的爬了文後,試著練習以下的程式碼 http://delphi.ktop.com.tw/topic.php?topic_id=36220 卻發現他會出現is not a member of 'TForm1'的錯誤訊息,請問是缺少了哪一個部份?謝謝!    我大約知道了有關TunuFile的語法了(以下程式碼),只是要如何寫在BCB裡頭還是相當模糊。 EX:我在From上放一個Edit,能夠將輸入的內容寫入到一個ini,甚至也可以從這個ini讀入到Edit內,請問要如何實作出來,想請有經驗的版有給予指導謝謝。
// 把資料寫入 ini 檔案
   AnsiString szPath=ExtractFilePath(Application->ExeName);
   TIniFile *ini=new TIniFile(szPath "Data.ini");
   for(int i=0; i<10; i  )
   {
      ini->WriteInteger("Data", IntToStr(i), i);
   }
   delete ini;       // 從 ini 檔案讀取資料
   AnsiString szPath=ExtractFilePath(Application->ExeName);
   TIniFile *ini=new TIniFile(szPath "Data.ini");
   for(int i=0; i<10; i  )
   {
      Memo1->Lines->Add(IntToStr(ini->ReadInteger("Data", IntToStr(i), 0)));
   }
   delete ini;    
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-10-11 14:25:12 IP:59.115.xxx.xxx 未訂閱
phoenix_csie 您好:    看看是不是少引用了 IniFiles.hpp 表頭檔?如果不是的話,請將該訊息的前面那個部分也列出來,這樣子才能知道是那一個物件 "is not a member of 'TForm1'"? 讀寫 ini 檔案時,必須要告知寫入或讀取的區段名稱 (如果要使用區段的話),同時所給予的項目名稱必須在同一個區段內是唯一的,您貼上來的範例使用了迴圈,而回圈內的讀寫對象都是 "Data",這樣子會在寫入時僅寫入一筆項目名稱為 "Data" 的資料,以您的範例而言,您應該要將 "Data" 改成 "Data" IntToStr(i) 這個樣子,才能寫入名稱為 "Data0"~"Data9" 的十筆資料,讀取的時候也是一樣的,查看一下 Help 中有關 WriteInteger....等的說明時,都有範例可以參考,先試試看吧。 7 天天敲鍵盤 v 時時按滑鼠 8
phoenix_csie
一般會員


發表:6
回覆:15
積分:4
註冊:2005-10-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-10-11 17:21:37 IP:218.162.xxx.xxx 未訂閱
版主你好: 我的錯誤訊息是(你說的部分我有注意到,所以沒有miss表頭檔。) [C Error] Unit1.cpp(23): E2316 '_fastcall TForm1::FormClose(TObject *,TCloseAction &)' is not a member of 'TForm1' 我練習的是這篇文章中的程式碼 http://delphi.ktop.com.tw/topic.php?topic_id=36220 剛剛研究一番後`,是不是讀取部分是寫在TForm1部分 而寫入則是自己再加一個FormClose的函式(不知道是不是這樣稱呼?)上去? 各個函式名稱我都有爬文知道了,只不過不知道怎樣寫在BCB內 因為我之前都是在放元件後,將程式碼寫在原件內。 TiniFile是不可視元件,我就不知道要如何開始, 所以先問一個基本的Edit內讀寫的方法。 謝謝版主熱心回答
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-10-11 18:10:50 IP:59.115.xxx.xxx 未訂閱
phoenix_csie 您好:    您大概是直接複製範例上的程式碼,或者是自己鍵入的 FormClose 程序,但是未在 .h 檔內加上對應的宣告,所以編譯時會產生錯誤。    您設定過可視元件的屬性吧?那個 Object Inspector 視窗有兩個頁籤,Properties 是設定元件屬性的,而 Events 則是設定元件的事件,您描述的 FormClose 是 Form 的 OnClose 事件,因此您應該透過前述的視窗,在 Form1 的 OnClose 事件欄裡點擊滑鼠左鍵兩次,讓 BCB 自動產生該事件處理程序的宣告與框架,然後再將處理程序鍵入到那個框架內去,這樣子就不會產生您所描述的那種錯誤了。      7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/10/11 18:12:54
phoenix_csie
一般會員


發表:6
回覆:15
積分:4
註冊:2005-10-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-10-11 20:04:04 IP:218.162.xxx.xxx 未訂閱
感謝版主大熱心回答: 稍微的懂了一些,也試著將一些資料帶入看看,不過依然還是迷迷糊糊,所以不好意思問個基礎問題。    今天我以一個Edit元件做例子: ini檔案內容中的節區(Section)」及「識別字(KeyWord)請問要如何產生? (程式中完成內容,或是事先寫好檔案格式給程式讀取) EX:ini內容為 [Edit1] content=
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-10-11 22:13:40 IP:59.115.xxx.xxx 未訂閱
phoenix_csie 您好:    我用一個簡單的範例來做說明好了:
// 寫入
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TIniFile *QueryFile = new TIniFile("c:\\test.ini");  // 設定處理對象為 c:\test.ini
    AnsiString QuerySection = "Edit1";  // 要寫入的區段 (Section) 名稱        // 將 Edit1->Text 的內容寫到以 content 為名的項目去
    QueryFile->WriteString(QuerySection, "content", Edit1->Text);        delete QueryFile;
    QueryFile = NULL;
}    // 讀取
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    TIniFile *QueryFile = new TIniFile("c:\\test.ini");  // 設定處理對象為 c:\test.ini
    AnsiString QuerySection = "Edit1";  // 要讀取的區段 (Section) 名稱        // 讀取名稱為 content 的項目,並將讀取到的內容設給 Edit1,如果沒有找到指定的項目,則將 Edit1 設為空字串
    Edit1->Text = QueryFile->ReadString(QuerySection, "content", "");        delete QueryFile;
    QueryFile = NULL;
}
7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/10/11 22:17:50
phoenix_csie
一般會員


發表:6
回覆:15
積分:4
註冊:2005-10-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-10-11 23:46:32 IP:218.162.xxx.xxx 未訂閱
謝謝~如果我要自訂寫入或是讀取的位置要怎樣將 OpenDialog1或是SaveDialog1和上述的程式一起配合呢? EX: Edit->Text->LoadFromFile(OpenDialog1->FileName); FileName = OpenDialog1->FileName;
無故障
一般會員


發表:17
回覆:69
積分:17
註冊:2004-03-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-10-12 23:36:24 IP:211.76.xxx.xxx 未訂閱
插花一下    
    // 寫入
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TIniFile *QueryFile = new TIniFile(OpenDialog1->FileName) ;//讀取也修改一下就可以了    //  TIniFile *QueryFile = new TIniFile("c:\\test.ini");  // 設定處理對象為 c:\test.ini
    AnsiString QuerySection = "Edit1";  // 要寫入的區段 (Section) 名稱        // 將 Edit1->Text 的內容寫到以 content 為名的項目去
    QueryFile->WriteString(QuerySection, "content", Edit1->Text);        delete QueryFile;
    QueryFile = NULL;
}    
練習! 練習! 再練習!
------
嘿嘿嘿
phoenix_csie
一般會員


發表:6
回覆:15
積分:4
註冊:2005-10-11

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-10-13 17:20:06 IP:218.162.xxx.xxx 未訂閱
謝謝你的插花~不過我就是這樣寫然後不行的~~ 存檔會出現錯誤~讀檔則是沒有反應 還是感激你的幫忙~~謝謝
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-10-14 01:05:39 IP:59.115.xxx.xxx 未訂閱
phoenix_csie 您好:    試試看下列敘述是否為您要的動作?
// 寫入
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    if (SaveDialog1->Execute()) {
        TIniFile *QueryFile = new TIniFile(SaveDialog1->FileName);
        AnsiString QuerySection = "Edit1";            QueryFile->WriteString(QuerySection, "content", Edit1->Text);            delete QueryFile;
        QueryFile = NULL;
    }
}    // 讀取
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    if (OpenDialog1->Execute()) {
        TIniFile *QueryFile = new TIniFile(OpenDialog1->FileName);
        AnsiString QuerySection = "Edit1";            Edit1->Text = QueryFile->ReadString(QuerySection, "content", "");            delete QueryFile;
        QueryFile = NULL;
    }
}
7 天天敲鍵盤 v 時時按滑鼠 8
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-10-14 11:09:37 IP:218.162.xxx.xxx 未訂閱
我也插花一下~~不過我是問問題..><    這幾天我也在弄這個~~不過我需要的是ChenckBox和RadioButton    卻出現   [C++ Error] Unit1.cpp(30): E2451 Undefined symbol 'ChenckBox1'   [C++ Error] Unit1.cpp(33): E2109 Not an allowed type 這些問題    想麻煩有經驗的前輩幫忙一下~~謝謝    
  if (SaveDialog1->Execute()) {
        TIniFile *QueryFile = new TIniFile(SaveDialog1->FileName);            AnsiString QuerySection = "ChenckBox1";
        ChenckBox1->Checked = QueryFile->WriteBool(QuerySection, "content", ChenckBox1->Checked);            AnsiString QuerySection2 = "RadioButton1";
        RadioButton1->Checked = QueryFile->WriteBool(QuerySection2, "content", RadioButton1->Checked);            delete QueryFile;
        QueryFile = NULL;
    }
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-10-14 13:05:43 IP:218.162.xxx.xxx 未訂閱
自己解出來了....>< 
        if (SaveDialog1->Execute()) {
        TIniFile *QueryFile = new TIniFile(SaveDialog1->FileName);            AnsiString QuerySection2 = "ChenckBox1";
        QueryFile->WriteBool(QuerySection2, "content", CheckBox1->Checked);            AnsiString QuerySection3 = "RadioButton1";
        QueryFile->WriteBool(QuerySection3, "content", RadioButton1->Checked);            delete QueryFile;
        QueryFile = NULL;
    } 
發表人 - miki-lion 於 2005/10/14 13:06:24
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-10-14 13:05:56 IP:59.115.xxx.xxx 未訂閱
Miki-lion 妳好:    妳真的是喔~仔細的看看那個錯誤訊息再對照一下妳的元件名稱,不就知道錯誤在那裡了嗎?< > 妳看看 <>> 與 <>> 這兩個字樣的差別在那裡,妳就會知道妳的錯誤在那裡了。< > 還有寫入與讀取的程序妳也混在一起啦。 <> <>> 天天敲鍵盤 <>v 時時按滑鼠 8 發表人 - RedSnow 於 2005/10/14 13:08:37
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-10-14 13:09:26 IP:218.162.xxx.xxx 未訂閱
哈哈~我又耍笨了~~不過解好後~你就馬上回答我了^^ 不過寫入的值為"1"耶~~ 是因為true=1嗎? 那空白等於false還是0等於false呢?
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-10-14 13:18:08 IP:59.115.xxx.xxx 未訂閱
如果是 bool 類型,則寫入時 true = 1、false = 0,讀取時 1 = true、0 = false、空白 = 狀況....    補充一下:Miki-lion 若還有問題的話,請另開一題好好問個夠,不要讓原發問者的問題本質失焦。      7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/10/14 13:21:20
phoenix_csie
一般會員


發表:6
回覆:15
積分:4
註冊:2005-10-11

發送簡訊給我
#16 引用回覆 回覆 發表時間:2005-10-14 21:06:22 IP:218.162.xxx.xxx 未訂閱
引言: phoenix_csie 您好: 試試看下列敘述是否為您要的動作?[code][blue]// 寫入 恕刪~~
謝謝你的範例,我完全懂了,謝謝。
系統時間:2024-05-03 22:13:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!