AGB  ·  Datenschutz  ·  Impressum  







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

Variable als Zeiger?

Ein Thema von neomic · begonnen am 22. Sep 2007 · letzter Beitrag vom 24. Sep 2007
Antwort Antwort
Seite 2 von 2     12   
neomic
(Gast)

n/a Beiträge
 
#11

Re: Variable als Zeiger?

  Alt 23. Sep 2007, 18:26
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?
  Mit Zitat antworten Zitat
Benutzerbild von SubData
SubData

Registriert seit: 14. Sep 2004
Ort: Stuhr
1.078 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: Variable als Zeiger?

  Alt 23. Sep 2007, 18:53
Tut es ja.
Der Index des ersten Objekts (count=1) ist 0.
Ronny
/(bb|[^b]{2})/
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#13

Re: Variable als Zeiger?

  Alt 23. Sep 2007, 19:01
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
  Mit Zitat antworten Zitat
neomic
(Gast)

n/a Beiträge
 
#14

Re: Variable als Zeiger?

  Alt 23. Sep 2007, 19:17
Zitat von Hawkeye219:
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.

OMG JA NOCHMAL!!!!

Guckt mal wie ich nen neues Auto mache -.- (per Button)

Delphi-Quellcode:
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;
ich danke dir!

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?
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#15

Re: Variable als Zeiger?

  Alt 23. Sep 2007, 19:41
Ich kann hier nur die Hilfe zitieren:

Zitat von Delphi6-Hilfe:
Mit TObjectList können Sie eine Liste von Objekten speichern und verwalten. Die Komponente stellt Eigenschaften und Methoden für das Hinzufügen, Löschen, Umsortieren, Suchen, Zugreifen und Sortieren von Objekten zur Verfügung. Ist die Eigenschaft OwnsObjects auf True gesetzt (Voreinstellung), verwaltet TObjectList den Speicher seiner Objekte, das heißt, ein Objekt wird freigegeben, wenn sein Index neu zugewiesen wird, wenn es mit der Methode Delete, Remove oder Clear aus der Liste entfernt wird oder wenn die Instanz TObjectList selbst aufgelöst wird.
Der Defaultwert von OwnsObjects ist True, die Liste wird also zum Eigentümer der aufgenommenen Objekte.

Gruß Hawkeye
  Mit Zitat antworten Zitat
neomic
(Gast)

n/a Beiträge
 
#16

Re: Variable als Zeiger?

  Alt 23. Sep 2007, 20:38
Ich hab mir da jetzt mal sowas gebastelt:

Delphi-Quellcode:
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;
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...

Kann ich mir anders helfen?
  Mit Zitat antworten Zitat
neomic
(Gast)

n/a Beiträge
 
#17

Re: Variable als Zeiger?

  Alt 24. Sep 2007, 13:13
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:
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;
Danke nochmal an alle beteiligten!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 12:47 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