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

請問FontStyle 的內容可以存入ini嗎?

尚未結案
terence_lee
初階會員


發表:62
回覆:82
積分:28
註冊:2004-07-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-24 19:13:13 IP:211.74.xxx.xxx 未訂閱
各位先進大家好: 小弟想要請問編輯盒Edit Font Style修改後,可以將它儲存起來嗎?下次程式開啟時便可以載入來使用..謝謝大大們撥空指點^_^y.
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-25 01:24:31 IP:211.76.xxx.xxx 未訂閱
terence_lee 您好 :    您可以利用 ini 或是 Registry 紀錄 enum type .. TIniFile 有 WriteBinaryStream/ReadBinaryStream 的 Method 可以寫入/讀取 Binary Stream (使用 Registry 有對應的元件),您可以利用以下的函式轉換 enum type <-> Stream    
function TransformSetToStream(var tar;size:integer):TStream;
var
  ByteArr : TByteArray absolute tar;
begin
  Result := TMemoryStream.Create;
  Result.Position := 0;
  Result.WriteBuffer(ByteArr,size);
  Result.Position := 0;
end;    procedure TransformStreamToSet(var tar;var AStream:TStream;size:integer);
var
  ByteArr : TByteArray absolute tar;
begin
  AStream.Position := 0;
  AStream.ReadBuffer(tar,size);
end;
PS. 抱歉我不熟 BCB , 以 Delphi 語法示意,我想在 BCB ,這兩個 function 應該需要改寫 .. ---- 我只會兩件事,這也不會,那也不會 眼見不一定為真 ----
terence_lee
初階會員


發表:62
回覆:82
積分:28
註冊:2004-07-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-26 17:10:21 IP:211.74.xxx.xxx 未訂閱
謝謝SouthWind大大的指點,可是小弟也不會Delphi說。。所以我也不會改寫。。呃~~不好意思^_^||
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-27 11:24:39 IP:221.169.xxx.xxx 未訂閱
以Font->Color來說:
template 
void TransformSetToStream(T& tar, TMemoryStream* result)
{
  result->Position=0;
  result->WriteBuffer(&tar, sizeof(T));
  result->Position=0;
}    template 
void TransformStreamToSet(T& tar, TStream* AStream)
{
  AStream->Position=0;
  AStream->ReadBuffer(&tar, sizeof(T));
}    void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TIniFile *ifile=new TIniFile("C:\\test.ini");
  TMemoryStream* s=new TMemoryStream;
  TransformSetToStream(Memo1->Font->Color, s);
  ifile->WriteBinaryStream("test section", "Color", s);
  ifile->UpdateFile();
  ifile->ReadBinaryStream("test section", "Color", s);
  TransformStreamToSet(Memo1->Font->Color, s);
  delete s;
  delete ifile;
}
事實上,對於元件的Attribute有更好的方法: WriteComponent() 可以將Component的所有屬性都寫到Stream去 再利用ObjectBinaryToText,可以轉成AnsiString 問題是... 他僅支援TComponen所屬的類別,很不幸的TFont並不屬於TComponent 轉個彎的方法是把TEdit利用上述的程序整個存下來 讀取的時候讀到暫時的TEdit物件,再取出其Font屬性 理論上應該有更簡單的方法,因為TFont是繼承TPersistent的, 應該可以利用Assing()等函式,把他的成員狀態記錄到某個地方去 然而截至目前為止,我還沒找到方法... 這就有待其他大大的研究了 發表人 - justdo 於 2004/11/27 11:28:57 發表人 - justdo 於 2004/11/27 11:31:43
系統時間:2024-05-06 4:06:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!