Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - dynam. Array eines Records in abgeleitetem Objekt belegen


VizeTE - Sa 08.02.03 09:07
Titel: dynam. Array eines Records in abgeleitetem Objekt belegen
Hallo alle zusammen.

Also ich habe folgendes Problem:

Ich habe mir einen Record definiert der etwa so aussieht:


Quelltext
1:
2:
3:
4:
TMyRecord = record
  Item1 : typ1;
  Item2 : typ2;
end;


Und dazu passend einen dynamischen Array


Quelltext
1:
TMyRecordList = array of TMyRecord;                    


Mit Hilfe dieses Types habe ich dann eine Variable im proteted Bereich eines Objektes deklariert.
Das sieht dann etwa so aus:


Quelltext
1:
2:
3:
4:
TMyObject = class
protected
  FMyRecordList : TMyRecordList;
end;


So dann habe ich dieses Objekt abgeleitet...


Quelltext
1:
2:
3:
4:
5:
TMyObject2 = class(TMyObjekt)
  .  
  .
  .
end;


Und hier ensteht dann mein "Problem". Ich möchte dem Array nun einfach was zuweisen. Aber nicht so das ich da jeden Index durcharbeite sondern eher in dem Stil, dass das ungefähr wie folgt aussieht:


Quelltext
1:
2:
3:
4:
FMyRecordList := TMyRecordList(
  (Item1: [Wert], Item2: [Wert]),
  (Item2: [Wert], Item2: [Wert])
);


Wobei vielleicht noch zu sagen ist, dass in meinem Record auch wiederrum selbstdefinierte
Typen vorhanden sind. Das schrenkt ja dann die Verwendung von Varianten ein, glaube ich.
Das Problem besteht wahrscheinlich lediglich darin, dass ich die exakte Syntax einfach nicht kenne.

Wäre schön wenn mir da jemand auf die Sprünge helfen könnte ;o)


Ciao und vielen Dank,

VizeTE


Andreas Pfau - Sa 08.02.03 19:39

Also, soweit ich weiß, kannst du nur liokale Variablen initialisieren (also nicht im code selber). Das sieht dan etwa so aus:

Quelltext
1:
2:
var
  Point := TPoint(X: 1; Y: 2);


Mit deinem Array wird das wahrscheinlich eh' nicht gehen, da man ja zuerst den Speicher reservieren muss (SetLength()). Und dann kannst du die Variable ja nicht mehr initialisieren.


AndyB - Sa 08.02.03 20:00

In deinem Fall, würde ich ein paar Funktionen schreiben, die das ermöglichen:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
function BuildMyRecordList(const Args: TMyRecordList): TMyRecordList;
begin
  Result := Copy(Args);
end;

function MyRecord(const Item1: Integer; const Item2: string): TMyRecord
begin
  Result.Item1 := Item1;
  Result.Item2 := Item2;
end;


// erzeugen:
FMyRecordList := BuildMyRecordList( [
  MyRecord(10, 'Hallo'),
  MyRecord(20, 'wie'),
  MyRecord(30, 'geht'),
  MyRecord(40, 'es'),
  MyRecord(50, 'dir')
]);