Einzelnen Beitrag anzeigen

Thorben86

Registriert seit: 20. Nov 2003
Ort: Brühl
365 Beiträge
 
Delphi 2005 Personal
 
#1

Problem mit dem zugreifen auf dyn. Shapes.

  Alt 14. Okt 2004, 22:07
Hi, ich hab wieder ein Problem mit meinen dynamischen Shapes. Ic hspeicher die jetzt in nem Array. allerdings kommt eine Exception wenn ich in der 2. Procedure die erste For-Schleife auf die größe des Arrays stelle. wenn ich dort die anzahl der scheiben einstelle, kommt keine exception, er findet jedoch die Komponente auch nicht. Mache ich beim Suchen irgend was falsch, weil eigentlich müsste es die Komponente mit dem Namen ja geben.

Erstellung:
Delphi-Quellcode:
var i:integer;
shape:TShape;
anzahl:integer;
begin
  for I:=1 to 30 do
  shapes[i].free;
  Stapel[1].Anzahl := 0;
  
  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;

end;
Zugreifen:
Delphi-Quellcode:
var
   Kompo:TShape;
   i:Integer;
begin
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;

if (Kompo <> nil) then
begin
Kompo.Left := Stapel[Zielstapel].left - (Kompo.Width div 2);
Kompo.Top := Stapel[Zielstapel].Top - (15 * (Stapel[Zielstapel].Anzahl+1)) ;
inc(Stapel[Startstapel].Anzahl,-1);
inc(Stapel[Zielstapel].Anzahl);
Kompo.Name := 'im_st'+ InttoStr(Zielstapel) + 'nr' + InttoStr(Stapel[Zielstapel].Anzahl);
end;

end;
Edit: Array deklaration: shapes : Array[1..30] of TShape;

die showmesage ist nur dafür da, um zu sehen, of der in die if-Abfrage rein kommt, tut er aber nicht, also is kompo dann nil und der verändert nix, ich weis aber nicht, wie ich das ändern kann.
  Mit Zitat antworten Zitat