![]() |
Re: Variable als Zeiger?
Ich habe herausgefunden, dass Add() mir immer "0" zurückgibt bzw. count immer 1 bleibt... Was soll das denn?
Eigentlich sollte es doch den Index zurückgeben an dem es in der Liste steht, oder? |
Re: Variable als Zeiger?
Tut es ja.
Der Index des ersten Objekts (count=1) ist 0. |
Re: Variable als Zeiger?
Hallo,
wenn dir Add() immer den Wert 0 liefert, dann war die Liste vor dem Hinzufügen des neuen Elements offenbar leer. Vielleicht hast du einen logischen Fehler in deinem Programm und erzeugst immer neue Listen anstatt die bereits existierenden zu verwenden. Gruß Hawkeye |
Re: Variable als Zeiger?
Zitat:
OMG JA NOCHMAL!!!! Guckt mal wie ich nen neues Auto mache -.- (per Button)
Delphi-Quellcode:
ich danke dir!
procedure TSteuerung.Einchalten();
var i:Integer; begin // Variablen setzen Randomize; hTimer.Enabled:=True; // Wir haben 4 verschiedene Autoarten (Also für jede Autoart ein Unterarray) [b] for i:=0 to 3 do hAuto[i]:=TObjectList.Create(); NeuesAuto(3);[/b] end; Versuch das jetzt noch mit dem Löschen hinzubekommen... Dazu eine Frage: Wird Destroy/Free dann automatisch aufgerufen bei Remove? Und wenn Free aufgerufen wird, muss ich dann auch in TAuto Free überschreiben oder ruft der dann das Destroy von der untersten Klasse auf? |
Re: Variable als Zeiger?
Ich kann hier nur die Hilfe zitieren:
Zitat:
Gruß Hawkeye |
Re: Variable als Zeiger?
Ich hab mir da jetzt mal sowas gebastelt:
Delphi-Quellcode:
Ich bekomm wieder ne AV, wahrscheinlich (wie vorher schon gesagt), weil hAuto[i].Count in der while-Schleife nur einmal am Anfang aufgenommen wird und sich dieser Wert bei den nächsten Schleifendurchläufen nicht ändert...
procedure TSteuerung.Aufraeumen();
var i,h:Integer; begin for i:=0 to 3 do begin h:=0; while h<hAuto[i].Count do begin if TAuto(hAuto[i].Items[h]).IstAusDemBild then begin // Auto aus der Liste entfernen hAuto[i].Delete(h); // Aus der Variable vom Hintermann löschen wenn vorhanden if h>0 then TAuto(hAuto[i].Items[h-1]).SetzeAuto(nil); end else h:=h+1; end; end; end; Kann ich mir anders helfen? |
Re: Variable als Zeiger?
So für alle die es interessiert: Ich hab es endlich geschafft :)
Und zwar frag jetzt jedes Auto selber ab ob es gelöscht werden kann und stellt einen Löschantrag an die Steeuerung. Diese sieht jetzt so aus:
Delphi-Quellcode:
Danke nochmal an alle beteiligten!
procedure TSteuerung.Loeschen(Sender:TObject);
var i:Integer; begin i:=-1; // Typ abfragen if Sender is TAutoVonUnten then i:=0 else if Sender is TAutoVonRechts then i:=1 else if Sender is TAutoVonOben then i:=2 else if Sender is TAutoVonLinks then i:=3; if i>=0 then begin // Auto löschen und aus der Variable des Hintermannes löschen TAuto(hAuto[i].Extract(Sender)).Destroy; // Items[0] ist zwingend der erste Autofahrer nach der andere gelöscht ist if hAuto[i].Count>0 then TAuto(hAuto[i].Items[0]).SetzeAuto(nil); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:11 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