Thema: Delphi Problem mit property

Einzelnen Beitrag anzeigen

Jacob

Registriert seit: 14. Apr 2020
Ort: Dresden
4 Beiträge
 
Delphi 10.3 Rio
 
#1

Problem mit property

  Alt 15. Apr 2020, 10:38
Delphi-Version: 10.3 Rio
Hallo, ich bin neu hier im Forum und hoffe mit meiner Frage am richtigen Ort zu sein.

Hintergrund:
Sinn der Anwendung soll sein, eine definierbare Anzahl von zufälligen Zahlen zu generieren und diese in einem StringGrid auszugeben.
Da ich noch nie mit Klassen gearbeitet habe, wollte ich solche in mein Programm einbauen.

Als erstes habe ich einen dynamischen Array definiert, in dem die Zahlen eingetragen werden sollen:
Code:
   TArray = array of Integer;
Dann habe ich eine Klasse TLotto erstellt:
Code:
  TLotto = class
  private
    fArray: TArray;
    fLength: Integer;
    function GetArray(): TArray;
    procedure SetArray(Value: TArray);
    function GetLänge(): Integer;
    procedure SetLänge(Value: Integer);
  published
    constructor Create;
  public
    property LottoZahlen: TArray read GetArray write SetArray;
    property Länge: Integer read GetLänge write SetLänge;
  end;
Hier die dazugehörigen Module:
Code:
constructor TLotto.Create;
begin
  inherited;

  Self.Länge := 1;

end;

function TLotto.GetArray;
begin
  Result := fArray;
end;

procedure TLotto.SetArray(Value: TArray);
var
  i: Integer;
begin
  Randomize;

  SetLength(Value, fLength);

  for i := 0 to fLength - 1 do
  begin

    Value[i] := Random(49) + 1;

  end;

  fArray := Value;

end;

function TLotto.GetLänge;
begin
  Result := fLength;
end;

procedure TLotto.SetLänge(Value: Integer);
begin
  fLength := Value;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  MyLotto: TLotto;
begin

  MyLotto := TLotto.Create;
  try
    MyLotto.Länge := 6;
    FillStrg(MyLotto.LottoZahlen, StringGrid1);

  finally
    MyLotto.Free;
  end;

end;

procedure TForm1.FillStrg(_array: TArray; _object: TStringGrid);
var
  i: Integer;
begin

  for i := 0 to Length(_array) - 1 do
  begin
    _object.Cells[i, 0] := IntToStr(_array[i]);
  end;

end;
Jetzt zum Problem:
Die Property Länge mit Get- und SetLänge funktioniert einwandfrei, habe ich überprüft.
Allerdings scheint es regelrecht so, als würde die Prozedur SetLänge nicht aufgerufen.
Selbst, wenn ich an Stelle des dynamischen einen statischen Array verwende, wird in meinem StringGrid nicht mehr als eine Hand voll Nullen ausgegeben. Warum das?
Kann es sein, dass ich den Array innerhalb einer Klasse völlig falsch verwende, vielleicht gibt es auch einen kleinen Fehler, der mir nicht aufgefallen ist?
Der Compiler bringt auf jeden Fall keinerlei Fehler.
Nur das Ausgeben funktioniert nicht.

Falls es etwas offensichtliches ist, bitte nicht spotten, ist wirklich meine erstes Mal mit Klassen

Was zudem noch super wäre, wenn mir jemand nochmal fix in anfängerfreundlicher Sprache erklären könnte, wann man Interfaces verwendet. Scheint mir bisher eher ein Mehraufwand zu, der sich für mich nicht wirklich lohnt. Interfaces arbeiten ja allem Anschein nach eng mit Klassen zusammen.

Vielen Dank, ich freue mich auf die Antworten!
Jacob
Jacob
  Mit Zitat antworten Zitat