Schaue dir das genau an,
1.
Zitat:
for anzahl := 1 to sp_scheibenzahl.value do begin
Shapes[anzahl] := TShape.Create(self);
Shapes[anzahl].Name :='im_st'+ InttoStr(Startstapel) + 'nr' + InttoStr(Stapel[Startstapel].Anzahl);
Shapes[anzahl].Parent := Form1;
shapes[anzahl].Width := 100;
shapes[anzahl].Height := 15;
shapes[anzahl].Top := Stapel[Startstapel].Top - (15 * (Stapel[Startstapel].Anzahl+1));
shapes[anzahl].Left := Stapel[Startstapel].left - (shapes[anzahl].Width div 2);
shapes[anzahl].Shape := stRoundRect;
inc(Stapel[Startstapel].Anzahl);
end;
2.
Zitat:
for i:=1 to 30 do //Hier
Exception
begin
if (Shapes[i].name = 'im_st'+ InttoStr(Startstapel) + 'nr' + InttoStr(Stapel[Startstapel].Anzahl)) then
begin
showmessage('1');
Kompo := Shapes[i];
end;
end;
Im Fall 1. hast du Array of TShape bis zu sp_scheibenzahl.value definiert, aber im Fall 2. hast du
Array bis zu dreizigstem Element abgefragt. Wenn sp_scheibenzahl.value<30 die restliche Elemente sind
Nil. Das Element
NIL Hat kein Name-Eigenshaft. Deshalb kriegst du Exeption an diese stelle. Du versuchst mit nicht existierendem Exemplar von TShape zu reden.
Meiner meinung nach Code muss folgendermassen modifiziert werden:
Code:
for i:=1 to 30 do //Hier
Exception
begin
if (Shapes[i]<>nil) and
(Shapes[i].name = 'im_st'+ InttoStr(Startstapel) + 'nr' + InttoStr(Stapel[Startstapel].Anzahl)) then
begin
showmessage('1');
Kompo := Shapes[i];
end;
end;