hab dir leider noch keine noch nicht DIE antwort (edit: doch hab ihn, einfach weiter lesen und am besten diesen tipp hier auch befolgen
) aber schau mal bei FormCreate wo du versuchst die shapes in das array zu speichern hast du paar mal nen kleinen fehler gemacht mit den zahlen z.B. da:
Delphi-Quellcode:
list[6]:=S6;
list[7]:=S7;
list[9]:=S8;
list[10]:=S9;
....
list[16]:=S15;
list[17]:=S16;
list[18]:=S17;
list[18]:=S18;
list[19]:=S19;
ich empfehle dir eine schleife zu machen, so kannst du nichts falsch machen, der code ist veil kleiner und übersichtlicher und du wiederholst dich nicht 42 mal
schau mal so, du kannst den namen der komponente auch über ein string suchen anstatt direkt das objekt an die arrray items zu übergeben:
Delphi-Quellcode:
for c := 1 to 42 do
begin
// erklärung
// nehmen wir an die schleife fängt gerade an also ist c = 1 !!!!!
list[c] := (FindComponent('S'+IntToStr(c)) as TShape)
// also da c = 1 ist setzen wir das erste element von dem array list...
// zu dem komponenten welches wir mit dem namen und "FindComponent" suchen mit dem namen "S" und dann noch die zahl, wäre beim ersten durchlaufen der schleife also "S1". Nun müsst du noch angeben das diese komponente ein TShape ist und kein TButton oder ähnliches, machst du ganz einfach mit as TShape und am bestren ne klammer drum herum :)
end;
du siehst also dafür brauchst du gerade mal 3-4 zeilen und falsch machen kannst du da fast nichts
----------------------------------------
achtung: habe gerade bemerkt das ich hier bei meinen beispielen die anzahl verkehrt gemacht habe verglichen zu dir, also i mit 7 und j mit 6, hab das bei der formel nochmal angemerkt aber hoffe du verstehst dann selbst was der fehler war
Dann noch bei "Button4Click" scheint mir die berechnung der index falsch zu sein was auch der grund sein könnte warum nicht gefärbt wird
Delphi-Quellcode:
list[i*j].Brush.Color:=clred
und
list[i*j].Brush.color:=clblue;
wenn du einfach multiplizierst kommst du ja rein theoretisch schon nicht mal auf alle zahlen, wie willst du z.B. oder 17 oder 31 (und noch viele andere) aus zwei ganzen zahlen multiplizieren? geht ja nicht
also nehmen wir an dein feld ist so aufgebaut
Code:
1 2 3 4 5 6 7
1 x x x x x x x
2 x x x x x x x
3 x x x x x x x
4 x x x x x x x
5 x x x x x x x
6 x x x x x x x
x = feld
zahlen auf der linken seite sind deine i koordinate
zahlen auf der rechten seite sind deine j koordinate
wichtig ist das alle shapes auch in der richtigen reihenfolge sind damit das klappt also hier die oberen 2 reihen meines beispiel felds welches ich oben gezeichnet habe aber mit den namen anstatt den X
1 2 3 4 5 6 7
1 S1 S2 S3 S4 S5 S6 S7
1 S8 S9 .. .. .. .. .. <- geht weiter mit 10 11 12 13 14 ...
3 .. .. .. .. .. 16 17 18 19 20 21 22 und so weiter
4 geht so weiter...
was du jetzt gemacht hast ist einfach i und j multiplizieren aber das stimmt ja nicht einfach so. die formeln müssten so aussehen:
Delphi-Quellcode:
list[i*7+j +1].Brush.Color:=clred // mal 7 weil bei mir die i reihe 7 items hat, plus 1 weil du bei 1 mit dem zählen beginnst :D
und
list[i*7+j +1].Brush.color:=clblue; // mal 7 weil bei mir die i reihe 7 items hat, plus 1 weil du bei 1 mit dem zählen beginnst :D
so wird die i und j koordinaten korrent von den positionen zum index berechnet und das war der fehler bin mir ziemlich sicher