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

如何讀取多字串的值?

答題得分者是:RaynorPao
yamigo
一般會員


發表:19
回覆:41
積分:12
註冊:2002-12-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-12-20 11:43:24 IP:61.16.xxx.xxx 未訂閱
請問一下前輩~ 在Registry中,有一種值為多字串值~ 想請問在BCB中,如何讀取? 是用ReadString?還是ReadBinaryData? 能示範一下並將其值轉為AnsiString嗎? 先謝謝了!
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-12-20 11:53:06 IP:203.73.xxx.xxx 未訂閱
引言: 請問一下前輩~ 在Registry中,有一種值為多字串值~ 想請問在BCB中,如何讀取? 是用ReadString?還是ReadBinaryData? 能示範一下並將其值轉為AnsiString嗎? 先謝謝了!
yamigo 你好: 請問一下喔~~你說的多字串值是什麼呢?? --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
yamigo
一般會員


發表:19
回覆:41
積分:12
註冊:2002-12-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-12-20 12:10:56 IP:61.16.xxx.xxx 未訂閱
您可在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\您印表機名稱\DsDriver下,有一名稱 printMediaSupported 的機碼,該型態就是多字串值~ 或者您可在空白地方按滑鼠右鍵\新增 下~即可看到多字串值~ 我是想抓取多字串值的資料放進ComboBox裏面~ PS. 補充一點,我的OS是WindowsXP.. 可能在Win200和WinXP的Registry才有此一型態~ 而Win98的Registry沒有~因為Registry的版本不同~
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-12-20 12:41:50 IP:203.73.xxx.xxx 未訂閱
引言: 您可在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\您印表機名稱\DsDriver下,有一名稱 printMediaSupported 的機碼,該型態就是多字串值~ 或者您可在空白地方按滑鼠右鍵\新增 下~即可看到多字串值~ 我是想抓取多字串值的資料放進ComboBox裏面~ PS. 補充一點,我的OS是WindowsXP.. 可能在Win200和WinXP的Registry才有此一型態~ 而Win98的Registry沒有~因為Registry的版本不同~
yamigo 你好: 跟上次一樣~~用 ReadBinaryData 就可以了< > 請參考以下的做法< >
void __fastcall TForm1::Button4Click(TObject *Sender)
{
   TRegistry *Reg=new TRegistry;
   Reg->RootKey=HKEY_LOCAL_MACHINE;
   Reg->OpenKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Print\\Printers\\傳真\\DsDriver", false);
   if(Reg->ValueExists("printMediaSupported"))
   {
      DWORD dwBuf=Reg->GetDataSize("printMediaSupported");
      BYTE *bBuf=new BYTE[dwBuf];
      Reg->ReadBinaryData("printMediaSupported", bBuf, dwBuf);

      TMemoryStream *msBuf=new TMemoryStream;
      msBuf->Size=dwBuf;
      msBuf->Write(bBuf, dwBuf);
      msBuf->Position=0;
      msBuf->SaveToFile("Buf.dat");
      delete msBuf;          delete bBuf;
   }
   Reg->CloseKey();
   delete Reg;
}
備註: 讀出來的串流~~以 0x00 分隔所有的字串 因此~~你必須自己把這些字串找出來 這部分就讓你自己寫吧 <>有問題再提出來吧 --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
yamigo
一般會員


發表:19
回覆:41
積分:12
註冊:2002-12-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-12-21 01:29:32 IP:61.70.xxx.xxx 未訂閱
可是~~RaynorPao大大~~ 小弟我剛接觸BCB不久(約二個星期)~ 對型態轉換很棘手~更遑論要判斷了~ 找遍手邊書籍也找無TMemoryStream的參考文獻~ 查了BCB的Help~更是~看攏嘸~~ 所以~能否請RaynorPao大大教一下~~ 拜託囉~~~>.< 先謝謝啦~
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-12-21 01:41:18 IP:61.221.xxx.xxx 未訂閱
引言: 可是~~RaynorPao大大~~ 小弟我剛接觸BCB不久(約二個星期)~ 對型態轉換很棘手~更遑論要判斷了~ 找遍手邊書籍也找無TMemoryStream的參考文獻~ 查了BCB的Help~更是~看攏嘸~~ 所以~能否請RaynorPao大大教一下~~ 拜託囉~~~>.< 先謝謝啦~
yamigo 你好: 好吧~~那我這次就幫助你< > 把上面藍色的程式碼~~換成下面紅色的程式碼< >

      ComboBox1->Clear();
      char *szChar=(char*)bBuf;
      char *szZero=szChar;
      int i=0;          while(iItems->Add(szChar);
            szChar=szZero i 1;
         }
         i  ;
      }
      ComboBox1->ItemIndex=0;
備註: 其實這部分跟 BCB 是沒有很大的關係的 建議你要多加強 C/C 的基本功了 市面上有很多這方面的書籍(養成多逛書店的好習慣) 加油囉~~如果還有其他問題~~再提出來 --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
yamigo
一般會員


發表:19
回覆:41
積分:12
註冊:2002-12-05

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-12-21 01:52:41 IP:61.70.xxx.xxx 未訂閱
耶~~真謝謝大大滴幫忙~~ 我會僅遵教悔的~~ ^^
yamigo
一般會員


發表:19
回覆:41
積分:12
註冊:2002-12-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-12-23 11:10:02 IP:61.16.xxx.xxx 未訂閱
對不起~又有問題了~ 小弟將大大您的程式碼放到button1的OnClick Event上執行~~ 不會有問題~ 假設我有一個TForm叫PrinteDialog.. 若放到 __fastcall TFormPrintDialog::TFormPrintDialog(TComponent* Owner) : TForm(Owner) 這裡面~Compiler不會有問題~ 但一進入該 Form 就會出現 "Access violation ...." 然後是停留在 delete bBuf; 那一行~ 請問是否有那有問題? 發表人 - yamigo 於 2002/12/23 11:11:07
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-12-23 11:20:57 IP:203.73.xxx.xxx 未訂閱
引言: 對不起~又有問題了~ 小弟將大大您的程式碼放到button1的OnClick Event上執行~~ 不會有問題~ 假設我有一個TForm叫PrinteDialog.. 若放到 __fastcall TFormPrintDialog::TFormPrintDialog(TComponent* Owner) : TForm(Owner) 這裡面~Compiler不會有問題~ 但一進入該 Form 就會出現 "Access violation ...." 然後是停留在 delete bBuf; 那一行~ 請問是否有那有問題?
yamigo 你好: 我的不會耶?? 你是如何 Create FormPrintDialog 的?? --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
yamigo
一般會員


發表:19
回覆:41
積分:12
註冊:2002-12-05

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-12-23 14:44:54 IP:61.16.xxx.xxx 未訂閱
報告大大~~我也是照正常的方式Create Form的~ 但剛剛電腦給它重開機後~ 竟然~~~~~~~~~~~好了~~ 不過~也很謝謝大大您熱心的幫忙~~ ^^
系統時間:2024-11-23 23:23:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!