Einzelnen Beitrag anzeigen

Benutzerbild von Chris WF
Chris WF

Registriert seit: 15. Nov 2004
27 Beiträge
 
Delphi 5 Standard
 
#1

Mehrdimensionale TLabel-Arrays

  Alt 11. Mär 2006, 11:23
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...
  Mit Zitat antworten Zitat