Hallo alle zusammen!
Ersteinmal ein großes Lob an dieses Forum und allen, die mir mit ihren Beiträgen schon viel weitergeholfen haben!
Nun zu meiner aktuellen Frage.
Ich habe eine Klassenstruktur definiert, welche der folgenden prinzipiell ähnelt:
Delphi-Quellcode:
Type
TElement = class
show: boolean;
(...)
end;
TExElement1 = class(TEElement)
elemID: integer;
(...)
end;
TExElement2 = class(TEElement)
pos: real;
(...)
end;
(...)
TMyList = class(TList)
TExElement1List = class(TMyList)
function GetExElement1(index: integer): TExElement1;
public
procedure SaveToStream(Stream: TStream);
procedure LoadFromStream(Stream: TStream);
property Items[index: integer]: TExElement1 Read GetExElement1
end;
TExElement2List = class(TMyList)
(...) //das gleiche nochmal
implementation
procedure TExElementList.SaveToStream(Stream: TStream);
var
NewExElement1: TExElement1;
i,Len: integer;
begin
NewExElement1 := TExElement1.Create;
Len := Count
Stream.Write(Len, SizeOf(Len));
for I := 0 to Count - 1 do
begin
NewExElement1 := Items[i];
with NewExElement1 do
begin
Stream.Write(show, sizeof(show));
Stream.Write(elemID, sizeof(elemID));
(...)
end;
end;
end;
procedure TExElementList.LoadFromStream(Stream: TStream);
var
NewExElement1: TExElement1;
i,Len: integer;
begin
Stream.Read(Len, SizeOf(Len));
for I := 0 to Len - 1 do
begin
NewExElement1 := TExElement1.Create;
with NewExElement1 do
begin
Stream.Read(show, sizeof(show));
Stream.Read(elemID, sizeof(elemID));
end;
end;
end;
function TElement1List.GetExElement1(index: integer): TExElement1;
begin
Result := TExElement1(TMyList(self).Items[index]);
end;
//und fast genau das gleiche nochmal mit ExElement2...Exelement3 usw.
Wie ihr seht wird das ganze ziemlich umständlich, obwohl alle ExElemente ein paar gleiche Eigenschaften/Variablen haben durch die Vererbung. Jetzt würde ich das ganze gerne etwas rationalisieren.
1. die Methoden der TExElementLists sollten in TMyList allgemein definiert und mittels Vererbung weitergegeben werden (z.B. durch Übermittlung der jeweiligen Klasse (bsp. TExElement1, ...)
2. die Klasse TElement sollte auch schon die Grundeigenschaften in Streams speichern und aus Streams laden können, sodass in den TExElementLists nur noch die zusätzlichen Eigenschaften behandelt werden müssen.
Ist jetzt halbwegs rübergekommen, was ich möchte?
Falls ja, wär es sehr hilfreich wenn mir hier jemand auf die Sprünge hilft. DANKE schomal!
Gruß benwen