Se me ocurre que puedes usar records para hacer lo que te pidieron. Me explico, primero declaras un tipo de record que sera el que utilices para enviar y recibir los trozos:
Código Delphi
[-]
type
Paquete = record
Tipo: Integer; Tamano: Integer;
Buffer: array[0..1024] of Byte;
end;
Luego solo tienes que usar ese paquete durante la transmision:
Código Delphi
[-]
var
P: Paquete;
begin
P.Tipo:= 1;
P.Tamano:= stream.Read(P.Buffer,SizeOf(P.Buffer));
Cliente.Socket.SendBuf(P,sizeof(P))
end;
Y durante la recepcion
Código Delphi
[-]
var
P: Paquete;
begin
Socket.ReceiveBuf(P, Sizeof(P));
stream.WriteBuffer(P.Buffer, P.Tamano);
end;
El unico problema es que si el ultimo paquete no lo llenamos por completo, estaremos enviando mas bytes de los necesarios, pero como tambien enviamos el tamaño ese no seria un problema. Y es enormemente mas sencillo que andar haciendo malabares con punteros

¿que te parece?