Einzelnen Beitrag anzeigen

Art

Registriert seit: 14. Okt 2004
Ort: Neuwied
7 Beiträge
 
#8

Re: Problem mit dem zugreifen auf dyn. Shapes.

  Alt 15. Okt 2004, 09:02
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;
  Mit Zitat antworten Zitat