掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
memorystreamを文字列として変数等に入れたい (ID:152062)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
そうです。そのような感じの事をやりたかったんです。 意味が伝わったようで安心しました。 ただ、下記のようにWriteComponentで行うとrootの項目情報しか文字列化されていないのとコントロール限定になってしまうようなので少しイメージが違う感じでWriteComponentせずにSaveToStreamのものを入れるとエラーになってしまいました(多分、streamの中には下記代入したTOBJECTの内容も入っていますよね?) procedure TForm1.Button16Click(Sender: TObject); var e : TMemoryStream; s : string; begin ListBox1.Clear; Listbox1.items.addObject('aaa',TObject(1111)); Listbox1.items.addObject('bbb',TObject(2222)); Listbox1.items.addObject('ccc',TObject(3333)); e := TMemoryStream.Create; try e.WriteComponent(ListBox1); // ListBox1.items.SaveToStream(e); s := BinToText(e); Memo1.Lines.Text := s; finally e.Free; end; end; //----- 結果 ------ object ListBox1: TListBox Left = 776 Top = 64 Width = 121 Height = 97 ItemHeight = 12 Items.Strings = ( 'aaa' 'bbb' 'ccc') TabOrder = 11 end >TStrings なら Stream経由にする必要ないし >StringGrid なんて Save ないよ? 項目を戻したいというより、streamをstringにしたかったのです。 普通のStringGridはsaveはなかったんですね。というセーブではなく 例えばstringgridのセルにbase64の画像の文字列をいれ、セル指定でbase64の画像を指定コントロールに表示させられますよね? 0001|画像1の文字列|画像2の文字列|画像3の文字列|・・・・・・・ のようにstreamの内容をSTRING化できれば各cellに入れ、それの参照をかける事により復元できるのではとおもいました。 コントロール1の内容でコントロール2の内容に複写みたい場合は下記のようなものだと、 savestreamしloadstreamすればコントロールの複写ができます。 https://imgur.com/syRO0gR SGにTBITMAPのSTREAMをいれたいときも下記のようにすることによりsavestreamとloadstreamをするだけでTBITMAPのストリームを代入できます。 AdvStringGrid1.CreateBitmap(1,AdvStringGrid1.RowCount-1,true,haCenter, vaAboveText).LoadFromStream(stream); のような感じで項目の復元な感じではなくstream情報の文字列化と復元がしたい感じで WriteComponent経由だと、なんでもかんでもstreamの感じにはならない感じで思念しています。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.