AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Problem mit TObjectList in mehreren Ebenen
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit TObjectList in mehreren Ebenen

Ein Thema von bjoern · begonnen am 16. Feb 2007 · letzter Beitrag vom 16. Feb 2007
Antwort Antwort
Seite 1 von 2  1 2      
bjoern

Registriert seit: 27. Feb 2003
Ort: Lägerdorf
24 Beiträge
 
Delphi 7 Professional
 
#1

Problem mit TObjectList in mehreren Ebenen

  Alt 16. Feb 2007, 10:08
Hallo zusammen,

hab ein Problem mit TObjectList und einer Datenstrucktur die versuche damit aufzubauen.
Delphi-Quellcode:
// Aufruf der Funktion add
procedure TForm1.Button1Click(Sender: TObject);
var
  var
   List : TFirstList;
   MyObject : TBaseClass;
begin
  MyObject := TFirstClass.Create;
  List := TFirstList.Create;
  List.Add(MyObject);
end;

//Aufruf in der TFirstList.Add

function TFirstList.Add(const Item: TBaseClass): integer;
var
   First : TFirstClass;
begin
  result := inherited Add(Item);
  First := self.GetItem(Result);
  First.SecondList.Add(Item);
end;
So und wenn ich jetzt die TFirstList verwende und dort das Add aufrufe knallt es beim add der TSecondList, welches ich in der Add Routine der TFirstList aufrufe. Warum?

Ich hab das ganze auch schon mal umgebaut das ich das add meiner TSecondList dort aufrufe wo ich das add von TFirstList aufrufe und das klappt.
Nur nicht wenn ich das verschachtel

Kennt jemand den Grund...

Gruß
Angehängte Dateien
Dateityp: zip listentest_199.zip (14,4 KB, 4x aufgerufen)
Es gibt für alles eine Lösung sie muß nur gefunden werden
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Problem mit TObjectList in mehreren Ebenen

  Alt 16. Feb 2007, 11:01
Zitat von bjoern:
Hallo zusammen,

hab ein Problem mit TObjectList und einer Datenstrucktur die versuche damit aufzubauen.

...

So und wenn ich jetzt die TFirstList verwende und dort das Add aufrufe knallt es beim add der TSecondList, welches ich in der Add Routine der TFirstList aufrufe. Warum?
Hi,
auch wenn es etwas pauschal klingt, ich denke keiner wird sich hier (gerne) die Mühe machen durch deinen Code zu gehen. Wäre doch sehr nett, wenn Du den Leuten die Dir helfen wollen erstmal ein wenig entgegen kommst und deinen Beitrag etwas anders gestaltest.
Wenn es irgendwo knallt, dann wäre es doch nett, wenn Du die Stelle direkt markierst und natürlich auch überhaupt mal sagst, was genau "knallt es" hier meint! Was für ein Fehler wird denn ausgelöst? Wie (mit welchem Parameter) rufst Du denn die Methode auf?

Zudem wäre es sicherlich auch von Vorteil, wenn Du nur die relevanten Stellen postest und nicht den kompletten Code. Bei der Menge wird keiner im Browser einen guten Überblick bekommen, häng einfach die Dateien an den Beitrag an, dann kann man Dir leichter helfen (Lesen und Fehlersuchen in der IDE ist sehr viel komfortabler).

Ansonsten solltest Du einfach mal einen Breakpoint in der Methode Add der Liste setzen und dann in Einzelschritten schauen, wo genau der Fehler auftaucht (und vielleicht erkennst Du dann auch gleich das warum).

Ansonsten wäre es immer noch von Vorteil, wenn Du auch etwas zur Idee deiner Verschachtelung sagen könntest (die wirkt auf mich nicht ganz rund). Was genau möchtest Du denn hier für eine Datenstruktur erzeugen?

Gruß Der Unwissende
  Mit Zitat antworten Zitat
bjoern

Registriert seit: 27. Feb 2003
Ort: Lägerdorf
24 Beiträge
 
Delphi 7 Professional
 
#3

Re: Problem mit TObjectList in mehreren Ebenen

  Alt 16. Feb 2007, 11:56
Hi,

sorry hab erstmal aufgeräumt und ein Testprojekt angehängt.

Dort funktioniert es jetzt auch :-/

Naja der Sinn wird hier nicht ganz sichtbar da die Strucktur vereinfacht wurde.
Abgebildet wird eine Patientenakte.

Sprich ein Patient hat Studien. Im Beispiel "FirstList".
Diese Studie kann mehrere Serien haben(z.B.: Bilder, etc.). Im Beispiel "SecondList".
(DICOM-Strucktur für die, die es kennen)

Naja das ganze geht noch ein paar Ebenen tiefer.
Ich möchte eine Basisklasse einer Liste haben und mehrere abgeleitete Listen die z.B.: beim "add" noch zusätzliche Aktionen ausführen, wie den aufbau der Listen unter ihnen.

Aber im Beispiel geht es und im eigentlichen Projekt nicht, obwohl der Aufbau gleich ist.

Nagut muss den wohl noch mal suchen....

Danke und Gruß

Björn
Es gibt für alles eine Lösung sie muß nur gefunden werden
  Mit Zitat antworten Zitat
bjoern

Registriert seit: 27. Feb 2003
Ort: Lägerdorf
24 Beiträge
 
Delphi 7 Professional
 
#4

Re: Problem mit TObjectList in mehreren Ebenen

  Alt 16. Feb 2007, 13:22
Hallo nochmal,

so nachdem meine Suche mich mehr und mehr quält habe ich es geschaft den Fehler auch in einem vereinfachten Beispiel abzubilden.
Hab es als Projekt angehängt.

Wenn ich FirstList.Add ausführe git es eine AccessViolation aber warum?

Bin gespannt, was ich falsch mach...

Gruß

Björn
Angehängte Dateien
Dateityp: zip listentest_361.zip (16,3 KB, 7x aufgerufen)
Es gibt für alles eine Lösung sie muß nur gefunden werden
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: Problem mit TObjectList in mehreren Ebenen

  Alt 16. Feb 2007, 13:32
Wahrscheinlich ist dein ganzes Klassensystem nicht richtig.
Du brauchst eine Basisklasse, die in sich eingebettet schon eine List von Childs trägt.
Mit dieser Klasse lässt sich eine komplette Baumstruktur aufbauen.
Siehe TComponent: TComponent hat 2 Properties: ComponentCount und Components[] die dazu führen, dass sich alles was von Tcomponent abgeleitet ist beliebig ineinander verschachteln lässt.
Mit dem gleichen Prinzip baust du deine Basisklasse.
Andreas
  Mit Zitat antworten Zitat
bjoern

Registriert seit: 27. Feb 2003
Ort: Lägerdorf
24 Beiträge
 
Delphi 7 Professional
 
#6

Re: Problem mit TObjectList in mehreren Ebenen

  Alt 16. Feb 2007, 14:03
Hi,

das TestProjekt ist ein Beispiel.
In der endgültigen Struktur wird ein Objekt eine Liste besitzten und ein anderes 4 Listen.

Daher der Ansatz über TObjectList und nicht über TComponent.

Also hat jemand eine Idee, warum mein Add nicht funktioniert?

Gruß

björn
Es gibt für alles eine Lösung sie muß nur gefunden werden
  Mit Zitat antworten Zitat
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Problem mit TObjectList in mehreren Ebenen

  Alt 16. Feb 2007, 14:29
Hi,

irgendwie ist deine Struktur etwas "durcheinander"...

Du erzeugt ein Objekt BC:= tBaseClass.Create.
Dann fügst du dieses mit tFirstList.Add der Liste hinzu.
Dort in Add fügst du BC in die Liste selbst ein (inherited...), holst dir den Index dieses Elements, castest das Element (Typ=tBaseClass) nach tFirstClass und willst das Element (immer noch BC) in die SeconsdList der tFirstclass einfügen. Also das Element in die Secondlist seiner selbst einfügen?

Nur so am Rand: Die Ursache für die AV an sich ist der TypeCast von tBaseClass nach tFirstclass.
Gruß
Norman
  Mit Zitat antworten Zitat
bjoern

Registriert seit: 27. Feb 2003
Ort: Lägerdorf
24 Beiträge
 
Delphi 7 Professional
 
#8

Re: Problem mit TObjectList in mehreren Ebenen

  Alt 16. Feb 2007, 14:53
Hi,

also das es etwas mekwürdig aussieht gebe ich zu in der Praxis ist es einleuchtender.

Also in der Basisklasse soll später ein Objekt defieniert werden, welches mir den Zugriff auf eine Datenmenge liefert.
Mit den Objekten FirstClass und SecondClass gebe ich die geforderte Hierachie wieder.

Als Beispiel:

Meine zukünftige Basisklasse wird erzeugt und ließt eine Datenmenge ein.
Um die Datenmenge abzubilden wird der FirstList mit Add diese Basisklasse übergeben.
Daraufhin soll mit der Basisklasse FirstClass erstellt werden und eine SecondClass in der SecondList.

Die Basisklasse hat somit die Informationen für ein Objekt in FirstList und in SecondList.

Um das Beispiel weiter zu treiben könnte ich jetzt eine weitere Basisklasse erzeugen und sie je nach abhängigkeit in der
FirstList einfügen und seinen Unterstrukturen oder auch in SecondList.

Aber das die AV durch mein TypeCast kommt konnte ich nicht nach vollziehen.

Und vor allem wie richtig?

Gruß

Björn
Es gibt für alles eine Lösung sie muß nur gefunden werden
  Mit Zitat antworten Zitat
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Problem mit TObjectList in mehreren Ebenen

  Alt 16. Feb 2007, 15:02
Hi,

Zitat:
Und vor allem wie richtig?
nun, richtig ist je relativ.

Die AV kommt dadurch, das du für ein Objekt vom Typ tBaseClass mittels TypeCast die Property "SecondList" aufruft. Die gibt es da aber nicht, der Compiler meckert nicht weil ja gecastet wurde, also knallts beim Aufruf...

Damit läuft, wenn auch recht sinnfrei:
Delphi-Quellcode:
var
   List : TFirstList;
   MyObject : TBaseClass;
begin
  MyObject := TFirstClass.Create; <- jetzt hat das Objekt auch eine "SecondList"
...
Gruß
Norman
  Mit Zitat antworten Zitat
bjoern

Registriert seit: 27. Feb 2003
Ort: Lägerdorf
24 Beiträge
 
Delphi 7 Professional
 
#10

Re: Problem mit TObjectList in mehreren Ebenen

  Alt 16. Feb 2007, 15:46
Hi,

also erstmal danke.

aber warum konnte ich das selbe Objekt denn direkt aus dem Hauptprogramm adden?
Delphi-Quellcode:
var
   List : TFirstList;
   MyObject : TBaseClass;
begin
  MyObject := TBaseCLass.Create;
  MyObject.MyClass := 'Mein Test';
  List := TFirstList.Create;
  // Das add in FirstList ruft NICHT add von SecondList auf.
  List.Add(MyObject);
  List[0].SecondList.Add(MyObject);
Jetzt habe ich leider nur eine Teil Lösung.

Was mach ich denn falsch, wenn ich diese Strucktur aufbauen möchte mit einem Basisobjekt?

Zur Sinn frage:
Basisobject wird später Daten aus einer Datei laden und diese zur Verfügung stellen.
In meinem Fall Patientendaten.
Eine Datei hat immer daten zu einer Studie und einer Serie.
Der Patient kann mehrere Studien haben oder in einer Studie mehrere Serien.
Mein Ziel Mehrere Dateien laden jeweils eine Basisklasse und der entsprechenden Liste adden.

Also ein Tipp wie ich nur mit der Basisklasse de Listen aufbauen kann?

Gruß

Björn
Es gibt für alles eine Lösung sie muß nur gefunden werden
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:41 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