如何將自定義的對象存檔到Disk,然后再從Disk上Load到記憶體並還原成一個對象? |
尚未結案
|
strive1314
一般會員 發表:4 回覆:5 積分:1 註冊:2004-01-20 發送簡訊給我 |
|
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
對象 == object? For TPersistent, you may find Orpheus useful: http://sourceforge.net/projects/tporpheus/ Or you may create your own save/load methods.
Hints: look at SaveToStream and LoadFromStream methods of various VCL components.... For TComponent you may want to take a look at TRead and TWriter.
|
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
|
strive1314
一般會員 發表:4 回覆:5 積分:1 註冊:2004-01-20 發送簡訊給我 |
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
|
strive1314
一般會員 發表:4 回覆:5 積分:1 註冊:2004-01-20 發送簡訊給我 |
|
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
|
strive1314
一般會員 發表:4 回覆:5 積分:1 註冊:2004-01-20 發送簡訊給我 |
|
solnone
中階會員 發表:2 回覆:97 積分:69 註冊:2003-05-06 發送簡訊給我 |
你可以使用 TStream 的 WriteComponent 和 ReadComponent 來實現
你的 object 繼承自 TComponent 之後
下面的 Button2 會由 ReadComponent 來 Create 並設定和原 Button1 一樣 var
Button2: TButton; procedure TForm1.Button1Click(Sender: TObject);
var
fs: TFileStream;
begin
RegisterClass(TButton);
fs := TFileStream.Create('c:\objects.data', fmCreate);
try
fs.WriteComponent(Button1);
Button1.Top := 0;
Button1.Left := 0;
Button1.Caption := 'Old Button1';
finally
fs.Free;
end; fs := TFileStream.Create('c:\objects.data', fmOpenRead);
try
Button2 := (fs.ReadComponent(nil)) as TButton;
Button2.Parent := self;
finally
fs.Free;
end;
end;
|
speedup
資深會員 發表:19 回覆:259 積分:280 註冊:2003-07-04 發送簡訊給我 |
引言: 也就是關于對象的Serialize的問題。像Java語言有對象的Serialize機製,Delphi裏麵如何實現呢?你可以查看ObjectTextToBinary 的help 裡面有範例將Component的屬性轉成文字 function ComponentToString(Component: TComponent): string; var BinStream:TMemoryStream; StrStream: TStringStream; s: string; begin BinStream := TMemoryStream.Create; try StrStream := TStringStream.Create(s); try BinStream.WriteComponent(Component); BinStream.Seek(0, soFromBeginning); ObjectBinaryToText(BinStream, StrStream); StrStream.Seek(0, soFromBeginning); Result:= StrStream.DataString; finally StrStream.Free; end; finally BinStream.Free end; end; function StringToComponent(Value: string): TComponent; var StrStream:TStringStream; BinStream: TMemoryStream; begin StrStream := TStringStream.Create(Value); try BinStream := TMemoryStream.Create; try ObjectTextToBinary(StrStream, BinStream); BinStream.Seek(0, soFromBeginning); Result := BinStream.ReadComponent(nil); finally BinStream.Free; end; finally StrStream.Free; end; end;混心雜欲 棄修身~唉
------
唉~ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |