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