Использование динамических записей с TMemoryStream - PullRequest
0 голосов
/ 30 ноября 2011

Я использую TMemoryStream для отправки динамических записей, используя indy TCPServer.

Структура моей записи такова:

TMyRecord = record
  name : string ;  // unassigned size
  ID : integer ;
  Picture : TJPEGImage ;  
end;

Как я могу назначить переменную этого типа записи в TMemoryStream? Также, пожалуйста, объясните мне, как извлечь этот TMemoryStream в тип записи.

1 Ответ

3 голосов
/ 30 ноября 2011

Основная идея

Tmyrecord = Record
  name : string ;  // unassaigned 
  ID : integer ;
  Picture : TJPEGImage ;
  procedure SaveToStream(const aStream: TStream);
  procedure LoadFromStream(const aStream: TStream);
end;

procedure Tmyrecord.SaveToStream(const aStream: TStream);
var Len: Integer;
begin
  // save the length of name str
  Len := Length(name);
  aStream.Write(Len, SizeOf(Len));
  // save the name
  if(Len > 0)then aStream.Write(name[1], Len * SizeOf(name[1]));
  // save the ID
  aStream.Write(ID, SizeOf(ID));
  // save image
  Picture.SaveToStream(aStream);
end;

procedure Tmyrecord.LoadFromStream(const aStream: TStream);
var Len: Integer;
begin
  // read the length of name str
  aStream.Read(Len, SizeOf(Len));
  if(Len > 0)then begin
     // read the name
     SetLength(name, Len);
     aStream.Read(name[1], Len * SizeOf(name[1]));
  end else name := '';
  // load the ID
  aStream.Read(ID, SizeOf(ID));
  // load image
  if(Picture = nil)then Picture := TJPEGImage.Create;
  Picture.LoadFromStream(aStream);
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...