I don't understand in your posting which one of the records is the header and which contains the data.
You can mix different record types by writing them into a binary file or a TFileStream. Let me suppose that the header is a TNewSample record that you give and the data points are in the ListSource of a TLineSeries. Then you can write them in this way:
type
TDataRecord = record x,y: Double; end;
var
header: TNewSample;
procedure SaveToFile(ASeries: TChartSeries; AFileName: String);
var
MS: TMemoryStream;
i: Integer;
data: TDataRecord;
begin
MS := TMemoryStream.Create;
try
MS.WriteBuffer(header, SizeOf(header));
for i:=0 to ASeries.ListSource.Count-1 do begin
data,X] := ASeries.ListSource.Item[i]^.X;
data[Y] := ASeries.ListSource.Item[i]^.Y;
MS.WriteBuffer(data, SizeOf(data));
end;
MS.SaveToFile(AFileName);
finally
MS.Free;
end;
end;
procedure ReadDataFromFile(ASeries: TChartSeries; AFileName: String);
var
FS: TFileStream;
MS: TMemoryStream;
data: TDataRecord;
begin
ASeries.Clear;
MS := TMemoryStream.Create;
try
FS := TFileStream.Create(AFileName, fmOpenRead);
try
MS.CopyFrom(FS);
finally
FS.Free;
end;
MS.Read(header, SizeOf(header));
while MS.Position < MS.Size do begin
MS.ReadBuffer(data, Sizeof(data));
ASeries.AddXY(data.x, data.y);
end;
finally
MS.Free;
end;
end;