1
0
lazarus-tutorials/stream_visualize/demo_stream.pas
2021-11-11 15:15:54 -05:00

72 lines
1.2 KiB
ObjectPascal

unit demo_stream;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
type
Ts20 = string[20];
TdemoRec = record
aChar: Char;
anInt: integer;
aString: Ts20;
aDate: TDateTime;
end;
{ TdemoStream }
TdemoStream = class(TMemoryStream)
private
function GenerateRandomRec(num: integer): TdemoRec;
public
rec: TdemoRec;
constructor Create(numRecords: integer);
function RecAsString: string;
end;
implementation
uses math;
{ TdemoStream }
function TdemoStream.GenerateRandomRec(num: integer): TdemoRec;
begin
Result.aChar := Chr(65 + Random(26));
Result.aDate := TDateTime(RandomRange(100, trunc(Now)) + Random/10000);
Result.anInt := num;
Result.aString := Format('example string %d', [num]);
end;
constructor TdemoStream.Create(numRecords: integer);
var i: integer;
begin
// Initialize random number generator
Randomize;
// Call the inherited constructor
inherited Create;
Position := 0;
for i := 0 to numRecords-1 do
Write(GenerateRandomRec(i), SizeOf(TdemoRec));
end;
function TdemoStream.RecAsString: string;
begin
Read(rec, SizeOf(rec));
Result := Format(
'%5d %s %17s %s',
[rec.anInt, rec.aChar, rec.aString, FormatDateTime('dd-mm-yyyy:mm:ss', rec.aDate)]
);
end;
end.