Hallo Leute,
ich hab ein Problem mit mehrdimensionalen TLabel-Arrays...
Ich will ein kleines Funprogramm schreiben, dass einen Matrixbildschirm kreiert.
Dazu erstelle ich im OnCreate die nötigen Arrayfelder in einer for-Schleife.
Mit einem Timer sollen dann die nullen/Einsen geändert werden, aber irgendwas klappt da nich so ganz
Hier einfach mal der Code:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var x,y: integer;
begin
randomize;
form1.Left := 0;
form1.Top := 0;
form1.Width := screen.Width;
form1.Height := screen.Height;
for x := 0 to ((form1.Width-15) div 11) do
for y := 0 to ((form1.height-30) div 26) do
begin
setlength(Labels,x+1,y+1);
Labels[x,y] := TLabel.Create(self);
with Labels[x,y] do
begin
parent := self;
width := 10;
height := 24;
left := (11*(x)) + 2;
top := (26*(y)) + 2;
font.Color := clGreen;
font.height := -18;
caption := inttostr(round(random(2)));
OnClick := LabelsClick;
end;
end;
timer1.Enabled := true;
end
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var x,y,r,c: integer;
begin
randomize;
for x := 0 to ((form1.Width-15) div 11) do
for y := 0 to ((form1.height-30) div 26) do
begin
r := round(random(2));
if (Labels[x,y].Caption = '0') OR (Labels[x,y].Caption = '1') then
c := strtoint(Labels[x,y].Caption)
else
c := round(random(2));
if (r = c) then
Labels[x,y].Caption := '0'
else
Labels[x,y].Caption := '1';
// labels[x,y].repaint;
end;
end;
Ohne das auskommentierte Repaint wird nur die "Zeile" oben und die "Spalte" rechts aktualisiert
Mit Repaint kommt ein Zugriffsfehler...