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

關於Variant與TIniFile間的應用問題

尚未結案
jackwu
一般會員


發表:28
回覆:54
積分:16
註冊:2002-08-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-30 18:53:55 IP:211.75.xxx.xxx 未訂閱
各位先進: 小弟在程式中,為了簡化INI檔案的讀檔與存檔方式,所以採用了Variant變數,來進行變數的存取動作,其程式碼如下:  
//---------------------------------------------------------------------------
void __fastcall TToolForm::OpenINIFile(AnsiString FileName)
{
   sFile = new TIniFile(FileName);
}
//---------------------------------------------------------------------------
void __fastcall TToolForm::CloseINIFile()
{
   delete sFile;
}
//---------------------------------------------------------------------------
void __fastcall TToolForm::RWINIData(AnsiString Section, AnsiString Indn, Variant &Data)
{
   if(rwState)
   {
      int nTmp;   float fTmp;   bool bTmp;   AnsiString sTmp;
      switch(Data.VType)
      {
         case varInteger: Data = sFile->ReadInteger(Section, Indn, nTmp); break;
         case varBoolean: Data = sFile->ReadBool(Section, Indn, bTmp);    break;
         case varSingle:  Data = sFile->ReadFloat(Section, Indn, fTmp);   break;
         case varString:  Data = sFile->ReadString(Section, Indn, sTmp);  break;
      }
   }
   else
      sFile->WriteString(Section, Indn, Data);
}
//---------------------------------------------------------------------------
void __fastcall TToolForm::RWLearnData(AnsiString FileName)
{  
   OpenINIFile(FileName);       RWINIData("GrabParameter", "g_nGlassLen_mm", g_nGlassLen_mm);
   RWINIData("GrabParameter", "g_nViewOverlap", g_nViewOverlap);
   RWINIData("GrabParameter", "g_nViews", g_nViews);
   RWINIData("GrabParameter", "g_fPixel_um", g_fPixel_um);
   RWINIData("GrabParameter", "g_nSize", g_nSize);       CloseINIFile();
}
//--------------------------------------------------------------------------- 
現在在文字的儲存與讀取沒有問題,但是發現Variant的變數要傳回其他的變數如int, float, AnsiString等,卻沒有辦法將參數傳遞過去,請問各位先進,我的程式有哪裏寫錯了呢? 因為是第一次使用Variant變數,還不是很了解其用法,煩請各位先進指教,謝謝
jackwu
一般會員


發表:28
回覆:54
積分:16
註冊:2002-08-18

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-26 13:55:00 IP:211.75.xxx.xxx 未訂閱
各位先進: 看來此一問題好像沒有辦法找到有效的解答,所以小弟將程式改寫 雖然已經不是採用Variant,但還是可以達到相同的效果 程式碼如下     
 
void __fastcall TForm1::OpenINIFile(AnsiString FileName)
{
   sFile = new TIniFile(FileName);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CloseINIFile()
{
   delete sFile;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RWINIData(AnsiString Section, AnsiString Indn, int &Data)
{
   if(rwState)
      Data = sFile->ReadInteger(Section, Indn, Data);
   else
      sFile->WriteInteger(Section, Indn, Data);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RWINIData(AnsiString Section, AnsiString Indn, float &Data)
{
   if(rwState)
      Data = sFile->ReadFloat(Section, Indn, Data);
   else
      sFile->WriteFloat(Section, Indn, Data);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RWINIData(AnsiString Section, AnsiString Indn, AnsiString &Data)
{
   if(rwState)
      Data = sFile->ReadString(Section, Indn, Data);
   else
      sFile->WriteString(Section, Indn, Data);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RWLearnData(AnsiString FileName)
{
   OpenINIFile(FileName);       RWINIData("a", "Int", testint);
   RWINIData("a", "Float", testfloat);
   RWINIData("a", "AnsiString", teststring);       CloseINIFile();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   rwState = true;
   testint = 100;
   testfloat = 22.001;
   teststring = "aa";
   RWLearnData("d:\\a.ini");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
   rwState = false;
   testint = 10;
   floattestfloataa = 10.001;
   teststring = "test";
   RWLearnData("d:\\a.ini");
}
//---------------------------------------------------------------------------
不過如有更好的解決方法,也歡迎各位交流一下 發表人 - jackwu 於 2005/07/26 13:56:30
系統時間:2024-05-06 2:27:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!