Tym razem to ja potrzebuję pomocy...
Dany mamy rekord:
TR = record
PoleX: TTypX; //jakiś typ prosty
PoleY: TTypY; // j.w.
(...)
end;
oraz klasę:
TKlasa = class
private
FRecs: Array of TR;
procedure SetRec(Index: Integer; R: TR);
function GetRec(Index: Integer): TR;
public
property Recs[Index: Integer]: TR read GetRec write SetRec;
(...)
end;
function TKlasa.GetRec(Index: Integer): TR;
begin
Result:= FRecs[Index];
end;
procedure TKlasa.SetRec(Index: Integer; R: TR);
begin
// tutaj coś
end;
Dostęp do właściwości ma się odbywać przez metody SetRec i GetRec. O ile odczyt w dowolnym miejscu kodu nie sprawia problemów:
Pole:= Klasa.Recs[K].PoleX;
tak siedzę i nie mogę wymyśleć jak ma wyglądać metoda do zapisu, aby można było przypisać dane do rekordu poprzez
Klasa.Recs[K].PoleX:= Pole;
Z pewnych względów nie chcę mieszać w to wskaźników ani klas, bo albo skomplikuje się kod, który i tak dojeżdża powoli do granicy przejrzystości (a nie mam czasu na przepisanie od nowa po raz n-ty), albo wzrośnie zupełnie niepotrzebnie zużycie pamięci (dziedziczenie po TObject).
Zwykle do zapisu właściwości typu tablicowego (tablica Integerów, Stringów czy czegoś równie prostego) wystarcza
procedure TKlasa.SetProp(Index: Integer; Prop: TProp); // TProp = Integer albo coś
begin
FProp[Index]:= Prop;
end;
Dla tablicy rekordów to nie wystarcza (błąd "Left side cannot be assigned to"). O ile to możliwe chciałbym również uniknąć tworzenia oddzielnych właściwości (tablic) dla każdego pola rekordu (niezbyt to eleganckie, a i linijek kodu przybywa), choć aktualnie wydaje się to najrozsądniejszy pomysł...
Czy ktoś z szanownych forumowiczów ma jakąś sugestię? Podobny problem był już poruszany, ale nie doczekał się jasnego rozwiązania.