Neben dem, dass OnChange nicht dem von Borland vorgeschlagenen Konvention, Bezeichnernamen für property-write Methoden ist, wird dein OnChange nicht bei
StringArray.value[0, 1] := 'Hallo' aufgerufen. Es kommt erst zu zug, wenn du StringArray.value einen anderen Wert zuweist.
Du musst dein Array in eine Array-Eigenschaft umwandeln und nicht, so wie du es hast ein Array als Eigenschaft.
Delphi-Quellcode:
private
FValues: array of array of ShortString;
FOnChange: TNotifyEvent;
procedure SetValues(X, Y: Integer; const Value: ShortString);
function GetValues(X, Y: Integer): ShortString;
protected
procedure Changed; virtual;
public
property Values[X, Y: Integer]: ShortString read GetValues write SetValues;
property OnChange: TNotifyEvent read FOnChange write FOnChange;
end;
procedure TStringArray.SetValues(X, Y: Integer; const Value: ShortString);
begin
if Value <> FValues[X, Y] then
begin
FValues[X, Y] := Value;
Changed;
end;
end;
function TStringArray.GetValues(X, Y: Integer): ShortString;
begin
Result := FValues[X, Y];
end;
procedure TStringArray.Changed;
begin
if Assigned(FOnChange) then
FOnChange(Self);
end;