AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Componenten freigeben... Laufzeitfehler ??!

Ein Thema von Shadow · begonnen am 26. Nov 2003 · letzter Beitrag vom 26. Nov 2003
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.583 Beiträge
 
Delphi 12 Athens
 
#2

Re: Componenten freigeben... Laufzeitfehler ??!

  Alt 26. Nov 2003, 08:36
Ein Hallöle von http://www.FrankNStein.de/Smiley-Wolke.gif,

Erst mal empfehle ich dir die For-Schleife zu ändern:
Code:
[b]For[/b] i := ComponentCount - 1 [color=red][b]downto[/b][/color] 0 [b]do[/b]
Denn wenn etwas gelöscht wird, verschiebt sich doch alles Folgende in der Liste (hier in Components) nach vorn.
Daher kann schon mal etwas übersprungen werden.
Beispiel:
  • wird Komponente 3 gelöscht
  • Komponente 4 rutscht auf Position 3
  • jetzt wird aber mit Position 4 weiter gemacht
  • (das was vorher 4 war, aber jetzt 3 ist wrd übergangen)
Außerdem ist die Liste jetzt ja auch noch kürzer, als beim Einstig in die Schleife, daher ist es dann am Ende der Schleife möglich auf nicht mehr existierende Listeneintäge zuzugreifen, den die Letzten sind ja nach vorne gerutscht.


Jetzt aber zum Fehler, dieser Tritt immer in RemoveComponent auf.
Ich vermute mal, das dort die Komponente nicht so richtig gelöschen/freigegeben wird, Da auch beim beenden des Formulars, selbst wenn in dieser Prozedur mal kein Fehler auftritt, eine nette Fehlermeldung ausgegeben wird.
Da ich aber mit sowas nur sehr selten arbeite, kann ich aber nicht sagen was der Fehler ist.
Code:
[b]Procedure[/b] TForm1.Button1Click(Sender: TObject);
  [b]Var[/b] i: Integer;

  [b]Begin[/b]
    [b]For[/b] i := ComponentCount - 1 [b]downto[/b] 0 [b]do[/b]
      [b]If[/b] (Components[i] [b]is[/b] TSpeedButton) [b]and[/b] (TSpeedButton(Components[i]).Parent = vle_Zauber) [b]Then Begin[/b]
        [color=red]vle_zauber.RemoveComponent(Components[i]);[/color]
        TSpeedButton(Components[i]).Free;
      [b]End[/b];
  [b]End[/b];

http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz