AGB  ·  Datenschutz  ·  Impressum  







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

TObjektList mit 2 oder mehr TObjekte

Ein Thema von alfold · begonnen am 30. Dez 2018 · letzter Beitrag vom 1. Jan 2019
Antwort Antwort
Seite 1 von 2  1 2      
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#1

TObjektList mit 2 oder mehr TObjekte

  Alt 30. Dez 2018, 19:56
Delphi-Version: 7
Hi, alle miteinander

Kurze Erklärung,

Ich erstelle 2 Objekte, die ich in einer Objektliste verwalten möchte.
Meine Frage:
Wie erkenne ich, wie viele der einzelnen Objekte vorhanden sind?
Es gibt ja leider kein getrenntes Add.
Ich kann zwar anhand der Items feststellen wo und wie viele es gibt und sie dann als einzelne Counts zuordnen.
z.B. CountRow, CountCol

Ist aber nicht sehr nützlich da das ganze ja Dynamisch erzeugt wird und ich auf die Items zugreifen muss.
Gibt es eine Möglichkeit das "add" zu trennen??
Das ganze muss auch noch gespeichert und gelesen werden!

Delphi-Quellcode:
type
  TSoundRow = class(TObject)
     Soundfile: ShortString;
      SoundName: ShortString;
      SoundColor: TColor;
      CommentText: ShortString;
      CommentColor: TColor;
      CommentSize: Integer;
      SzeneText: ShortString;
      SzeneColor: TColor;
      ColIndex: Integer;
      Start: TTime;
      Anfang: TTime;
      Ende: TTime;
      LoopA: TTime;
      LoopE: TTime;
      VolA: Integer;
      VolE: Integer;
      FadeTime: real;

      FadeIn: Boolean;
      FadeOut: Boolean;
      FwStop: Boolean;
  end;

  TSoundCol = class(TObject)
       ColName: ShortString;
       ColColor: TColor;
       ColWidth: Integer;
  end;

    TAudioList = class(TObjectList)
      MasterName: ShortString;
      MasterColWidth: Integer;
      MasterColor: TColor;
      CommentName: ShortString;
      CommentColWidth: Integer;
      CommentNameColor: TColor;

      protected
        procedure SetRow(i: Integer; aSoundRow: TSoundRow);
        procedure SetCol(i: Integer; aSoundCol: TSoundCol);
        function GetRow(i: Integer): TSoundRow;
        function GetCol(i: Integer): TSoundCol;
        function getRowCount: Integer;
        function getColCount: Integer;
      public
        property SounRow[i: Integer]: TSoundRow read GetRow write SetRow;
        property SoundCol[i: Integer]: TSoundCol read GetCol write SetCol;
        property CountRow: Integer read getRowCount;
        property CountCol: Integer read getColCount;
     // function addSoundRow(Aobjekt: TSoundRow): Integer;
     // function addSoundCol(Aobjekt: TSoundCol): Integer;

     // procedure SaveToFile(const Fname: string);
     // procedure LoadFromFile(const Fname: string);

  end;
Ich bin erst am Anfang von dem ganzen "ObjectList" usw.
Vieles gelesen die hälfte nur verstanden, also fängt man mal an
Ich hoffe ihr könnt mir helfen.

Gruß alfold
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#2

AW: TObjektList mit 2 oder mehr TObjekte

  Alt 30. Dez 2018, 20:19
Delphi-Referenz durchsuchenTObjectList.Count?

Der Sinn hinter getrennten Counts ergibt sich mir nicht. Aber das musst du selber wissen (oder erfragen).

Grüße
Dalai
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: TObjektList mit 2 oder mehr TObjekte

  Alt 30. Dez 2018, 20:33
Delphi-Referenz durchsuchenTObjectList.Count?

Der Sinn hinter getrennten Counts ergibt sich mir nicht. .....
Grüße
Dalai
Im Prinzip schon, wenn man auf die einzelnen unterschiedlichen Objecte über das Item zu greifen muss. Z.B colcount ist die Anzahl Spalten und das item 1 wöhre die spalte 1. geht aber in diesem fall nicht!

gruß alfold
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.347 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: TObjektList mit 2 oder mehr TObjekte

  Alt 30. Dez 2018, 21:08
Es macht keinen Sinn dann nur eine Liste zu benutzen. Wie wäre es, wenn du einfach zwei Listen innerhalb deiner Klasse nutzt statt von einer TObjectList abzuleiten?

Und wenn du z.B. die kostenlose aktuelle Community Edition benutzen könntest, könntest du auch eine TObjectList<TSoundCol> und eine TObjectList<TSoundRow> benutzen ohne zu casten.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: TObjektList mit 2 oder mehr TObjekte

  Alt 30. Dez 2018, 21:30

Im Prinzip schon, wenn man auf die einzelnen unterschiedlichen Objecte über das Item zu greifen muss. Z.B colcount ist die Anzahl Spalten und das item 1 wöhre die spalte 1. geht aber in diesem fall nicht!

gruß alfold
Klngt wie rektale Augenoperation.
Wenn Du unterschiedliche Objekte in einer Liste verwalten willst, kannst Du sie nur dort gleich behandeln wo sie auch gleich sind.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: TObjektList mit 2 oder mehr TObjekte

  Alt 30. Dez 2018, 21:47
....
Wenn Du unterschiedliche Objekte in einer Liste verwalten willst, kannst Du sie nur dort gleich behandeln wo sie auch gleich sind.

Gruß
K-H
Hab ich ja schon mitbekommen zu mindestens was das Item der Objektliste betrifft.
Hätt ja sein können das man da dran drehen kann!?
In etwa so
Delphi-Quellcode:
function addSoundRow(Aobjekt: TSoundRow): Integer;
function addSoundCol(Aobjekt: TSoundCol): Integer;
Es macht keinen Sinn dann nur eine Liste zu benutzen. Wie wäre es, wenn du einfach zwei Listen innerhalb deiner Klasse nutzt statt von einer TObjectList abzuleiten?

Und wenn du z.B. die kostenlose aktuelle Community Edition benutzen könntest, könntest du auch eine TObjectList<TSoundCol> und eine TObjectList<TSoundRow> benutzen ohne zu casten.
Ja, werde ich wohl nicht drum rum kommen. War ja auch nur so eine Idee.

Wird hoffentlich kein Problem dann beim Speichern ???.

Gruß alfold

Geändert von alfold (30. Dez 2018 um 21:50 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: TObjektList mit 2 oder mehr TObjekte

  Alt 31. Dez 2018, 00:12
Zum erkennen wieviele Objekte vom jeweiligen Typ vorhanden sind könntest du folgendes machen (Code inkomplett aber die Vorgehensweise sollte klar sein):

Delphi-Quellcode:
for i:=0 to Count-1 do
 If Items[i] is TSoundRow then...
Michael Kübler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: TObjektList mit 2 oder mehr TObjekte

  Alt 31. Dez 2018, 04:43
Hallo,
warum soll es ein Speicher-Problem geben?
Du schreibst den Speichern-Code ja auch, oder?
Heiko
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#9

AW: TObjektList mit 2 oder mehr TObjekte

  Alt 31. Dez 2018, 08:21
Zum erkennen wieviele Objekte vom jeweiligen Typ vorhanden sind könntest du folgendes machen (Code inkomplett aber die Vorgehensweise sollte klar sein):

Delphi-Quellcode:
for i:=0 to Count-1 do
 If Items[i] is TSoundRow then...
Hab ich schon gemacht. Damit erhalte ich die Anzahl SoundsRow und SoundCol aber nicht den jeweiligen itemindex so wie man ihn brauch (aus einem Array, oder Liste).
Hallo,
warum soll es ein Speicher-Problem geben?
Du schreibst den Speichern-Code ja auch, oder?
Zitat von alfold:
Wird hoffentlich kein Problem dann beim Speichern ???.
Mh, bei 2 Objektlisten! Irgendwann sollen die Daten ja gespeichert werden.
Stell ich mir sehr komplex vor dies in eine Datei zu Speichern.

Wie gesagt hab ich noch nie gemacht, bis dato.

Totzdem Danke an alle,
hab jetzt noch ein 2 property hinzugefügt als itemindex.
Hätt ich gleich machen sollen

Gruß alfold
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: TObjektList mit 2 oder mehr TObjekte

  Alt 31. Dez 2018, 11:15
hab jetzt noch ein 2 property hinzugefügt als itemindex.
Hätt ich gleich machen sollen
Dann würde mich jetzt mal interessieren, was bei deinem Programm passiert wenn du folgendes Szenario hast:

  • Du speicherst 10 Objekte in deiner ObjectList.
  • Die zusätzliche Property ItemIndex deiner Objects sind von 0-9 durchnummeriert
  • Du löschst das vierte (oder was auch immer für ein) Element/Object aus der Liste
  • Du durchläufst die Liste und willst irgendein spezielles Object haben. Sagen wir das, bei dem deine ItemIndex Property auf 9 steht
  • Du greifst auf das jetzt 9. Object in der Liste zu und nimmst dir den ItemIndex
  • Der Item Index ist 9, aber der größte Index ist 8, da nur noch 9 Objekte in deiner Liste sind
  • ... probier aus was passiert

Ein anderer Fall wäre, dass du auf ein Object mit einem bestimmten ItemIndex zugreifen möchtest, dieses aber in Wirklichkeit von einem anderen Typen ist, da sich durch das Löschen von Elementen die Reihenfolge verschoben hat. Also spätestens beim Cast auf ein anderes Object bzw. beim Zugriff auf eine Property dieses Objects knallt es dann.

Also hast du nur zwei Möglichkeiten:
  1. Du musst jedes Mal wenn du ein Element aus der Liste löschen willst den ItemIndex aller nachfolgenden Elemente korrigieren
  2. Du benutzt einfach zwei unterschiedliche Listen für dein Problem
  3. (Optional: Du machst dir eine eigene Klasse die wiederum in einer generischen TObjectList<T> gespeichert wird und verwaltest dort deine Daten)
  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 12:40 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