Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Mehrdimensionale TLabel-Arrays (https://www.delphipraxis.net/65026-mehrdimensionale-tlabel-arrays.html)

Chris WF 11. Mär 2006 10:23


Mehrdimensionale TLabel-Arrays
 
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...

konda 11. Mär 2006 16:39

Re: Mehrdimensionale TLabel-Arrays
 
Wie hast du Labels deklariert? Und wie sieht die Procedure LabelsClick aus? In dem Code sehe ich noch keinen Fehler. :cyclops:

MrKnogge 11. Mär 2006 16:48

Re: Mehrdimensionale TLabel-Arrays
 
Du darfst SetLength nicht in der Schleife aufrufen !

Denn wenn x das zweite mal durchläuft setzt es y wieder zurück.

gruss

Chris WF 11. Mär 2006 18:25

Re: Mehrdimensionale TLabel-Arrays
 
Autsch...
Vielen Danke :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz