AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TIntegerList nach Vorbild TStringList, richtig übernommen?
Thema durchsuchen
Ansicht
Themen-Optionen

TIntegerList nach Vorbild TStringList, richtig übernommen?

Ein Thema von Nogge · begonnen am 24. Okt 2005 · letzter Beitrag vom 24. Okt 2005
Antwort Antwort
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#1

TIntegerList nach Vorbild TStringList, richtig übernommen?

  Alt 24. Okt 2005, 16:51
Hallo Community,
Ich habe mir eine TIntegerList Klasse erstellt, die nur von TObject abgeleitet ist. Ich habe wirklich nur das (aller) wichtigste in diese Klasse implementiert (für meine Zwecke halt). Könnte sich das ein gescheiter DPler mal anschauen (s. Anhang) und mir Verbesserungsvorschläge/Bugfixes mitteilen? Wäre sehr nett.
(P.S. Ich denke, Begin- und EndUpdate usw. sind nciht nötig bei der Klasse, da sie ja keine visuelle Anzeige hat. Da bräuchte ich jetzt nur ne Bestätigung für, dann löschen ich diesen Teil aus meiner Klasse)
Ich möchte diese Liste allerdings ein wiederholtes Mal verändern, indem ich ein record mit ca. 10 (anstatt 1-2) Einträgen hinzufüge. Um nun auf alle Einträge mittels property zugreifen zu können, möchte ich gern nur eine einzige property <record> deklarieren.
Beispiel:
Delphi-Quellcode:
type
  TRecord = record
    i: Integer;
    s: String;
    d: TDateTime;
  end;
[...]
property Items[Index: Integer]: TRecord read Get write Put; default;
Bisher hat diese Variante leider immer zu einem "Index out of bounds"-Fehler geführt.Delphi weigert sich Items[Index] auszulesen, selbst wenn der Index im Count-Bereich ist (mit Breakpoints getestet).
Angehängte Dateien
Dateityp: pas integerlist_120.pas (5,2 KB, 13x aufgerufen)
  Mit Zitat antworten Zitat
shmia

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

Re: TIntegerList nach Vorbild TStringList, richtig übernomme

  Alt 24. Okt 2005, 17:12
Zitat von Nogge:
Ich habe mir eine TIntegerList Klasse erstellt, die nur von TObject abgeleitet ist. Ich habe wirklich nur das (aller) wichtigste in diese Klasse implementiert (für meine Zwecke halt). Könnte sich das ein gescheiter DPler mal anschauen (s. Anhang) und mir Verbesserungsvorschläge/Bugfixes mitteilen?
Besser wäre es, deine Klasse von TList abzuleiten und die vorgefertigten Methoden von TList
zu verwenden.
Dazu müssen einige Methoden neu geschrieben werden.
Wie das geht, kannst du in der Unit Contnrs am Beispiel von TObjectList abschauen.
Andreas
  Mit Zitat antworten Zitat
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#3

Re: TIntegerList nach Vorbild TStringList, richtig übernomme

  Alt 24. Okt 2005, 18:49
Ich habe deinen Rat befolgt und meine IntegerList von TList abgeleitet. Könntest du Dir diese Variante auch noch mal anschauen?
Wenn ich jetzt einen ganzen record als Ausgabewert für Items[Index] deklarieren möchte, sollte ich dann wohl stattdessen eine Klasse benutzen, richtig?
Angehängte Dateien
Dateityp: pas integerlist_114.pas (1,4 KB, 17x aufgerufen)
  Mit Zitat antworten Zitat
axelf98

Registriert seit: 27. Aug 2003
Ort: Ennepetal
440 Beiträge
 
Delphi 2005 Personal
 
#4

Re: TIntegerList nach Vorbild TStringList, richtig übernomme

  Alt 24. Okt 2005, 18:56
Zitat von Nogge:
Wenn ich jetzt einen ganzen record als Ausgabewert für Items[Index] deklarieren möchte, sollte ich dann wohl stattdessen eine Klasse benutzen, richtig?
Oder einen Pointer auf den Record:
Delphi-Quellcode:
Type TRecord = Record
  //...
end;

Type pTRecord = ^TRecord;
  Mit Zitat antworten Zitat
shmia

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

Re: TIntegerList nach Vorbild TStringList, richtig übernomme

  Alt 24. Okt 2005, 19:09
Zitat von Nogge:
Ich habe deinen Rat befolgt und meine IntegerList von TList abgeleitet. Könntest du Dir diese Variante auch noch mal anschauen?
Sieht soweit ganz ok aus.
2 Dinge:
* RecordPointer: PRecord würde ich wo nötig als lokale Variable führen; nicht als Variable im Objekt
* Im Destruktor würde ich rückwärts löschen: for i:=Count-1 downto 0 do
Zitat von Nogge:
Wenn ich jetzt einen ganzen record als Ausgabewert für Items[Index] deklarieren möchte, sollte ich dann wohl stattdessen eine Klasse benutzen, richtig?
Da kommt drauf an.
In den meisten Fällen ist es günstig, aus einem Record eine Klasse zu machen und dann in einer TObjectList zu speichern.
In ganz seltenen Fällen (z.B. Speichern von 3D-Punkten) kann ein Record Sinn machen, da der Overhead
von Objekten vermieden wird.
Andreas
  Mit Zitat antworten Zitat
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#6

Re: TIntegerList nach Vorbild TStringList, richtig übernomme

  Alt 24. Okt 2005, 20:01
Gut, vielen Dank shmia und axelf98! Ich werde jetzt versuchen, alles umzusetzen bzw. zu verbessern. Bei Fragen melde ich mich einfach noch mal.
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:53 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