掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
リストの保存と読み込み (ID:8777)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
リストが可変長と仮定して説明します。 ストリームに書き込む前にリストの長さdatalist.Countを 格納しておきましょう。 cnt := datalist.Count; fs.WriteBuffer(cnt, SizeOf(cnt)); で読み込むときリスト長を取得しておいて fs.ReadBuffer(cnt, SizeOf(cnt)); それを使用してループすれば for i:=0 to cnt-1 do begin datalist.Add(); datatemp:=Pointer(datalist.Items[i]); fs.ReadBuffer(datatemp, SizeOf(datatemp)); end; ループ分読みますので全部読み込めるでしょう ただしスタテツさんの指摘のようにDataCssに可変長のstringを 使用するのであればこの方法は使えません。 DataCssを type DataCss = class(TComponent) private FText : string; FDate : string; publised property Text: String read FText write FText; property Date: TDateTime read FDate write FDate; end; というように定義しておけば書き込むとき cnt := datalist.Count; fs.WriteBuffer(cnt, SizeOf(cnt)); for i:=0 to datalist.Count-1 do begin fs.WriteComponent(TComponent(datalist.Items[i])); end; 読み込むとき fs.ReadBuffer(cnt, SizeOf(cnt)); for i:=0 to cnt-1 do begin datalist.Add(); fs.ReadComponent(TComponent(datalist.Items[i])); end; というようにできます。 TComponentから継承するとCreate時に引数要るのでnilでも渡しておきましょう 難しいですけどこの辺を理解できれば絶対に役に立ちますので 挑戦してはいかがでしょうか? >メモコンポーネントに書いた文章なんかを保持したいので ええぇ!?それなら Memo1.Lines.SaveToFile('test.txt'); だけですよ・・・ 読み込むなら Memo1.Lines.LoadFromFile('test.txt'); です。 DelphiとVCLだと1行だけどVS.NETでやろうとしたら 結構プログラム書く必要あるので投げ出しましたよ・・・
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.