掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ストリームを配列として使う方法について (ID:25838)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
質問の内容が最初と微妙に変化してますね。 このような場合は、レコード型かクラスのインスタンスのリストを作るのが常道です。 クラスの方が好ましいのですが、ここでは質問内容に近いレコード型のリストをつくる例を示します。 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Button2: TButton; Button3: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} // データの型とそのポインタの定義 type PSenbunData = ^TSenbunData; TSenbunData = record X1,Y1,X2,Y2: double; end; var ms: TMemoryStream; lt: TList; // メモリストリームとリストのインスタンスを作成 procedure TForm1.FormCreate(Sender: TObject); begin ms := TMemoryStream.Create; lt := TList.Create; end; // メモリストリームとリストのインスタンスを破棄 procedure TForm1.FormDestroy(Sender: TObject); var i: integer; begin ms.Free; for i := lt.Count - 1 downto 0 do Dispose(PSenbunData(lt[i])); //項目は個別に破棄 lt.Free; end; // 2つのデータをメモリストリームに入れる procedure TForm1.Button1Click(Sender: TObject); var x1,y1,x2,y2,x3,y3,x4,y4: Double; begin x1 := 1.2; y1 := 2.3; x2 := 3.4; y2 := 4.5; x3 := 5.6; y3 := 6.7; x4 := 7.8; y4 := 8.9; ms.Write(x1, SizeOf(Double)); ms.Write(y1, SizeOf(Double)); ms.Write(x2, SizeOf(Double)); ms.Write(y2, SizeOf(Double)); ms.Write(x3, SizeOf(Double)); ms.Write(y3, SizeOf(Double)); ms.Write(x4, SizeOf(Double)); ms.Write(y4, SizeOf(Double)); end; // メモリストリームからデータを読み込んでリストに追加 procedure TForm1.Button2Click(Sender: TObject); var n, i: integer; pData: PSenbunData; begin n := ms.Size div SizeOf(TSenbunData); ms.Position := 0; for i := 0 to n-1 do begin New(pData); ms.Read(pData^, SizeOf(TSenbunData)); lt.Add(pData); end; end; // リストの項目にアクセスして表示 procedure TForm1.Button3Click(Sender: TObject); var data: TSenbunData; i: integer; begin Memo1.Clear; for i := 0 to lt.Count -1 do begin data := PSenbunData(lt[i])^; Memo1.Lines.Add(FloatToStr(data.X1)); Memo1.Lines.Add(FloatToStr(data.Y1)); Memo1.Lines.Add(FloatToStr(data.X2)); Memo1.Lines.Add(FloatToStr(data.Y2)); end; end; end.
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.