Hi!
Ich habe möchte eine Klasse schreiben, in der ein dynamisches Array vorkommt, das einige andere Komponenten enthält. Außerdem sollen in der Klasse einige Funktionen vorkommen, um den Inhalt des Arrays zu verändern.
Hier ein Beispiel:
Die Klasse soll einen Kartenstapel darstellen, der in einem dynamischen Array die Karten enthält (TKarte ist woanders im Code definiert). Zusätzlich soll es noch eine Funktion geben (Add), mit der man eine Karte auf den Stapel legen kann.
Leider funktioniert das Ganze aber nicht:
<PRE>
type
TKartenstapel = class(TPanel)
private
FKarten: array of TKarte;
function GetKarten(Index: Integer): TKarte;
procedure SetKarten(Index: Integer; const Value: TKarte);
published
procedure Add(Karte: TKarte);
public
property Karten[Index: Integer]: TKarte read GetKarten write SetKarten; default;
end;
</PRE>
...
<PRE>
function TKartenstapel.GetKarten(Index: Integer): TKarte;
begin
result := FKarten[Index];
end;
procedure TKartenstapel.SetKarten(Index: Integer; const Value: TKarte);
begin
FKarten[Index] := Value;
end;
procedure TKartenstapel.Add(Karte: TKarte);
begin
SetLength(FKarten, Length(FKarten)+1);
FKarten[Length(FKarten)-1] := Karte;
end;
</PRE>
Sobald ich die Funktion Add benutze (oder eine andere Funktion, die das Array irgendwie verändern soll), kommt sofort die Fehlermeldung, dass eine EAccessViolation aufgetreten ist.
Wie kann ich dieses Problem lösen bzw. wo liegt der Fehler?
Danke schon mal im Voraus!!!!!!
mfg Devask
Ich habe möchte eine Klasse schreiben, in der ein dynamisches Array vorkommt, das einige andere Komponenten enthält. Außerdem sollen in der Klasse einige Funktionen vorkommen, um den Inhalt des Arrays zu verändern.
Hier ein Beispiel:
Die Klasse soll einen Kartenstapel darstellen, der in einem dynamischen Array die Karten enthält (TKarte ist woanders im Code definiert). Zusätzlich soll es noch eine Funktion geben (Add), mit der man eine Karte auf den Stapel legen kann.
Leider funktioniert das Ganze aber nicht:
<PRE>
type
TKartenstapel = class(TPanel)
private
FKarten: array of TKarte;
function GetKarten(Index: Integer): TKarte;
procedure SetKarten(Index: Integer; const Value: TKarte);
published
procedure Add(Karte: TKarte);
public
property Karten[Index: Integer]: TKarte read GetKarten write SetKarten; default;
end;
</PRE>
...
<PRE>
function TKartenstapel.GetKarten(Index: Integer): TKarte;
begin
result := FKarten[Index];
end;
procedure TKartenstapel.SetKarten(Index: Integer; const Value: TKarte);
begin
FKarten[Index] := Value;
end;
procedure TKartenstapel.Add(Karte: TKarte);
begin
SetLength(FKarten, Length(FKarten)+1);
FKarten[Length(FKarten)-1] := Karte;
end;
</PRE>
Sobald ich die Funktion Add benutze (oder eine andere Funktion, die das Array irgendwie verändern soll), kommt sofort die Fehlermeldung, dass eine EAccessViolation aufgetreten ist.
Wie kann ich dieses Problem lösen bzw. wo liegt der Fehler?
Danke schon mal im Voraus!!!!!!
mfg Devask
Comment