Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Listindex überschreitet das Maximum (https://www.delphipraxis.net/34227-listindex-ueberschreitet-das-maximum.html)

groomy 19. Nov 2004 15:59


Listindex überschreitet das Maximum
 
Könnt ihr mir sagen, warum hierbei immer diese Fehlermeldung angezeigt wird? Sieht so aus, als würde der auf eine Komponentenzahl zugreifen, die nicht mehr existiert?

Delphi-Quellcode:
procedure Tspiel.TiSchnellTimer(Sender: TObject);
var i:integer;

 for i:=1 to componentcount-1 do begin

     if timage(components[i]).tag=1 then
     Timage(components[i]).top:=Timage(components[i]).top-5;
 
     if (timage(components[i]).tag=1) and (timage(components[i]).top<0) then
     Timage(components[i]).destroy;

 end;
end;

Fossibaer58809 19. Nov 2004 16:12

Re: Listindex überschreitet das Maximum
 
Code:
Timage(components[i]).destroy;
Hier liegt das Problem. Du könntest es lösen, wenn Du Deine Schleife abwärts zählen lässt. :zwinker:

groomy 19. Nov 2004 16:18

Re: Listindex überschreitet das Maximum
 
Danke klappt, is auch logisch, :spin2: aber man kann ja nicht alles wissen :spin2:

Robert Marquardt 19. Nov 2004 16:31

Re: Listindex überschreitet das Maximum
 
Nie Destroy aufrufen. Immer Free.

Warum eigentlich wird von 1 ab gezaehlt?

Was dir hier aufstoesst ist das die Schleifenenbedingung nur einmal am Anfang ausgewertet wird.
Du loeschst Komponenten was die Anzahl der komponenten verringert. Entspechend greifst du irgendwann auf
nicht mehr vorhandene Komponenten zu. Zusaetzlich ueberspringst du Komponenten jedesmal wenn du eine loeschst.
Deshalb wie empfohlen abwaerts zaehlen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz