AW: Record zu TStringlist hinzufügen
So würde ich das ansatzweise machen. Minimale Implementation:
Delphi-Quellcode:
type
// Du nimmst natürlich Deinen Record TDataRecord = record Name : string[20]; Zahl : Integer; end; PDataRecord = ^TDataRecord; TDataRecordList = class(TList) protected function GetItem(AIndex: Integer): PDataRecord; procedure SetItem(AIndex: Integer; const Value: PDataRecord); public function Add(AData: TDataRecord): Integer; procedure Clear; override; property Items[AIndex : Integer] : PDataRecord read GetItem write SetItem; default; end; implementation { TDataRecordList } function TDataRecordList.Add(AData: TDataRecord): Integer; var PData : PDataRecord; begin New(PData); // Record-Inhalt kopieren (evtl. auch mit move). So bleibt Erzeugung und Freigabe in der Klasse. // Natürlich könnte man ein Overload von Add mit PData machen. PData.Name := AData.Name; PData.Zahl := AData.Zahl; Result := inherited Add(PData); end; procedure TDataRecordList.Clear; var PData : PDataRecord; I : Integer; begin for I := 0 to Count - 1 do begin PData := Items[I]; Dispose(PData); end; inherited; end; // Setter und Getter geben jeweils wieder den Pointer zurück, um sich Kopiervorgänge zu ersparen function TDataRecordList.GetItem(AIndex: Integer): PDataRecord; begin Result := inherited Items[AIndex]; end; procedure TDataRecordList.SetItem(AIndex: Integer; const Value: PDataRecord); begin inherited Items[AIndex] := Value; end; |
AW: Record zu TStringlist hinzufügen
Danke für das Beispiel.. Im Moment scheint es zu gehen obwohl in der Liste 2 Einträge mehr addiert werden als ich initialisiert habe.
Macht Probleme wenn ich den Count überprüfe. Siehe Pic! Warum werden mehr Einträge addiert? gruss |
AW: Record zu TStringlist hinzufügen
Dem Screenshot nach steht Count auf "6", was den Einträgen #0 bis #5 entspricht. Alles korrekt.
Wie die Liste sich intern verwaltet, manchmal dimensioniert sie das interne Array eine Idee größer (Stichwort Eigenschaft "Grow"), ist nur für sie selbst von Bedeutung. |
AW: Record zu TStringlist hinzufügen
Zitat:
Habe ja noch 6 und 7 auch wenn sie NIL sind. Werden diese mitgezählt beim Sprites.Count ?. Sorry habe mich mit dem Kram noch nie beschäftigt. gruss |
AW: Record zu TStringlist hinzufügen
Nein, Count sollte in Deinem Fall 6 ergeben (man darf Count nicht mit Capacity verwechseln).
|
AW: Record zu TStringlist hinzufügen
Zitat:
gruss |
AW: Record zu TStringlist hinzufügen
Habe da jetzt ein kleines Problem ;)
Wie kann ich die Einträge in der Liste verschieben ?
Delphi-Quellcode:
vorher mit dem Array war das kein Problem.
if (Item + ID_MAIN) <> FlagFound then
begin if Prop.ShortCutfound > 0 then NewLen := Sprites.Count + Prop.ShortCutfound else NewLen := Sprites.Count; Sprites.Add(TSprite.Create); CreateRecycleBin(MainHandle, NewLen); for x := ID_FIRST to NewLen do begin Sprites[x] := Sprites[x + 1]; if x = (NewLen - Prop.ShortCutfound) then begin for X1 := (NewLen - 1) downto (NewLen - Prop.ShortCutfound) do Sprites.Delete(X1); end; end; FlagFound := count; end;
Delphi-Quellcode:
gruss
if (Item + ID_MAIN) <> FlagFound then
begin if Prop.ShortCutfound > 0 then NewLen := High(Sprite) + Prop.ShortCutfound else NewLen := High(Sprite) + 1; Setlength(Sprite, NewLen); CreateRecycleBin(MainHandle, NewLen); for x := ID_FIRST to NewLen do begin Sprite[x] := Sprite[x + 1]; if x = (NewLen - Prop.ShortCutfound) then begin for X1 := (NewLen - 1) downto (NewLen - Prop.ShortCutfound) do Delete(Sprite, X1); end; end; FlagFound := count; end; |
AW: Record zu TStringlist hinzufügen
Delphi-Quellcode:
bzw.
TList<>.Move
Delphi-Quellcode:
.
TList<>.Exchange
http://docwiki.embarcadero.com/Libra...TList.Exchange |
AW: Record zu TStringlist hinzufügen
Zitat:
gruss |
AW: Record zu TStringlist hinzufügen
Noch ein einfache frage.. reicht ein einfaches Free damit alle Classen freigegeben werden oder muss ich da
noch etwas besonderes beachten? gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:46 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