Einzelnen Beitrag anzeigen

jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3
  Alt 1. Jun 2003, 18:27
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;
  Mit Zitat antworten Zitat