Thema: Delphi array angabe mit string

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#9

AW: array angabe mit string

  Alt 10. Aug 2010, 19:26
Wie gesagt, in diesem Fall mußt du einfach nur in deinem Setter einen Callback einführen.
Delphi-Quellcode:
procedure TMyArray.MySetter(index: string; value: integer);
begin
  ...
  if assigned(fOnChange) then
    fOnChange(self);
end;



Delphi-Quellcode:
type
  TMyArray = class
  private
    fArr: array[0..9] of array[0..9] of array[0..9] of integer;
    fOnChange: TNotifyEvent;
    procedure readIndex(index: string; var x, y, z: integer);
    function getString(index: string): integer;
    procedure setString(index: string; value: integer);
    function getIndex (x, y, z: integer): integer;
    procedure setIndex (x, y, z: integer; value: integer);
  public
    property item[index: string]: integer read getString write setString; default;
    property item[x, y, z: integer]: integer read getIndex write setIndex; default;
    property onChange: TNotifyEvent read fOnChange write fOnChange;
  end;

procedure TMyArray.readIndex(index: string; var x, y, z: integer);
var
  ex, ey, ez: integer;
begin
  val(index, x, ex);
  val(copy(index, ex + 1), y, ey);
  val(copy(index, ey + 1), z, ez);
  if (ex = 0) or (index[ex] <> ',') or (ey <> 0)
      or (index[ey] <> ',') or (ez <> 0) then
    raise Exception.Create('invalid index string');
end;

{$IFOPT R+}
  {$DEFINE TMYARRAY_R}
{$ENDIF}

{$R+}

function TMyArray.getString(index: string): integer;
var
  x, y, z: integer;
begin
  readIndex(index, x, y, z);
  result := fArr[x, y, z];
end;

procedure TMyArray.setString(index: string; value: integer);
var
  x, y, z: integer;
begin
  readIndex(index, x, y, z);
  fArr[x, y, z] := value;
  if assigned(fOnChange) then
    fOnChange(self);
end;

function TMyArray.getIndex(x, y, z: integer): integer;
begin
  result := fArr[x, y, z];
end;

procedure TMyArray.setIndex(x, y, z: integer; value: integer);
begin
  fArr[x, y, z] := value;
  if assigned(fOnChange) then
    fOnChange(self);
end;

{$IFNDEF TMYARRAY_R}
  {$R-}
{$ENDIF}
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat