掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TMemoryStream の使い方について (ID:11796)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> イメージ的には > MStream.Delete(10, 15); > 10バイト〜15バイトまでの6バイトを削除する。 function DeleteMS(ms:TMemoryStream;InitPos,EndPos:integer):Boolean; var tmp:TMemoryStream; begin result := false; if (InitPos>EndPos) or (EndPos>ms.Size-1) then exit; tmp := TMemoryStream.Create; try try ms.Position := 0; tmp.Write(ms.Memory^,InitPos); tmp.Write(pointer(PChar(ms.Memory)+EndPos+1)^,ms.Size-EndPos-1); tmp.Position := 0; ms.LoadFromStream(tmp); ms.Position := 0; result := true; except result := false; exit; end; finally tmp.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); var ms:TMemoryStream; begin ms := TMemoryStream.Create; try Memo1.Text := 'abcdefghij0123456789ABCDEFGHIJ'; Memo1.Lines.SaveToStream(ms); if DeleteMS(ms,10,15) then Memo2.Lines.LoadFromStream(ms) else Memo2.Text := 'Error'; finally ms.Free; end; end; > Aのデータの一部をBに置き換えるというのは function ReplaceMS(target,source:TMemoryStream;TargetPos:integer):Boolean; begin result := false; if ((targetPos+source.Size)>target.Size) then exit; try target.Position := targetPos; target.Write(source.Memory^,source.Size); target.Position := 0; result := true; except result := false; end; end; procedure TForm1.Button2Click(Sender: TObject); var a,b:TMemoryStream; s:string; begin a := TMemoryStream.Create; b := TMemoryStream.Create; try Memo1.Text := '012345678901234567890123456789'; Memo1.Lines.SaveToStream(a); s := 'ABCDEFGHIJ'; b.Write(PChar(s)^,Length(s)); if ReplaceMS(a,b,10) then Memo2.Lines.LoadFromStream(a) else Memo2.Text := 'Error'; finally a.Free; b.Free; end; end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.