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.