Ah... Es que los registros son medio HDP...
Verás, cuando uno llama a la propiedad izquierdo, Delphi va a llamar al GetHijo ¿Verdad? Bueno, pero GetHijo es una función, y la función devuelve una
copia del registro original. Y esa copia es, por defecto, de sólo lectura. Ahí está el problema.
Si uno hace algo así:
Código Delphi
[-]
type
TRec = record
campo1: string;
campo2: Boolean;
end;
type PRec = ^TRec;
type TAlgo = class
private
FDatos: array of TRec;
function GetDato(const Indice: Integer): PRec;
procedure SetDato(const Indice: Integer; const Valor: PRec);
public
property Datos[const Indice: Integer]: PRec read GetDato write SetDato;
end;
function TAlgo.GetDato(const Indice: Integer): PRec;
begin
Result:= @FDatos[Indice];
end;
procedure TAlgo.SetDato(const Indice: Integer; const Valor: PRec);
begin
FDatos[Indice]:= Valor^;
end;
MiObjeto.Datos[3].Campo1:= 'Hola';
Esto funciona, pero ¿porqué? Bueno, porque ahora estás devolviendo un puntero al original, y como la dereferencia en los registros (el ^) es automática, pues termina andando sin que tengas que agregar el ^ al hacer la asignación.
¿Se entiende lo que digo? Espero que sí, sino pues... que te ayude otro. Digo, volvé a preguntar y trato de explicarlo mejor.
Saludongos.