Just as I expected, Claus Christiansen came up with this:
>Er det virkelig rigtigt at man ikke kan have et array i en klasse se
>f.eks. nedenstående eksempel, som jeg ikke umiddelbart kan se nogen fejl
>ved men ved programkørsel og forsøg på at sætte en værdi via Matrix[2,2]
>= 3 får man en accessviolation. - Hvad har jeg glemt eller er det bare
>ikke muligt??? (flytter jeg FMatrix: TMa... uden for klassen så virker
>det fremragende, men så er problemet jo at jeg ikke har hvert sit array
>til hver instans).
>
>type
> TMatrixArray = array[0..15, 0..15] of Integer;
> TPixelMatrix = class(TPersistent)
> private
> FMatrix: TMatrixArray;
>
> procedure put(i, j: Integer; x: Integer);
> function get(i, j: Integer): Integer;
> public
> property Matrix[i, j: Integer]: Integer read Get write Put; default;
> end;
Prøv at bruge en pointer til din matrix i stedet, og så alloker
hukommelsen til matrix'en i Create() og dealloker i Destroy().
Cirka sådan her:
type
PMatrixArray = ^TMatrixArray;
TMatrixArray = array[0..15, 0..15] of integer;
TPixelMatrix = class(TPersistent)
private
FMatrix: PMatrixArray;
{... sæt selv resten ind}
public
constructor Create; override; // eller hvordan den nu ser ud
destructor Destroy; override;
end;
constructor TPixelArray.Create;
begin
inherited;
New(FMatrix);
end;
destructor TPixelArray.Destroy;
begin
Dispose(FMatrix);
end;
Niels
--
http://www.niller.f2s.com/ - niLLer's pages, that's my software
http://g4s.dnsq.org/ - when I'm online
g4s ad post dot ocm - new email! (note: it's .com !)
ICQ#: 50187323