![]() |
TIntegerList nach Vorbild TStringList, richtig übernommen?
Liste der Anhänge anzeigen (Anzahl: 1)
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:
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).
type
TRecord = record i: Integer; s: String; d: TDateTime; end; [...] property Items[Index: Integer]: TRecord read Get write Put; default; |
Re: TIntegerList nach Vorbild TStringList, richtig übernomme
Zitat:
zu verwenden. Dazu müssen einige Methoden neu geschrieben werden. Wie das geht, kannst du in der Unit Contnrs am Beispiel von TObjectList abschauen. |
Re: TIntegerList nach Vorbild TStringList, richtig übernomme
Liste der Anhänge anzeigen (Anzahl: 1)
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? |
Re: TIntegerList nach Vorbild TStringList, richtig übernomme
Zitat:
Delphi-Quellcode:
Type TRecord = Record
//... end; Type pTRecord = ^TRecord; |
Re: TIntegerList nach Vorbild TStringList, richtig übernomme
Zitat:
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:
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. |
Re: TIntegerList nach Vorbild TStringList, richtig übernomme
Gut, vielen Dank shmia und axelf98! Ich werde jetzt versuchen, alles umzusetzen bzw. zu verbessern. Bei Fragen melde ich mich einfach noch mal.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 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 by Thomas Breitkreuz