Variablen vom Typ Record in einer dynamischen Liste verwalten
August 6, 2010 - Lesezeit: ~1 Minute
unit MerkRecord;
interface
uses Classes,Variants;
type
// Dieser Rekord soll in der Liste enthalten sein
TMerkRecord = Record
I :integer;
s :string;
v : Variant;
a :array of char;
End;
// die eigentliche Liste
TMerkList = class(TList)
private
function GetItems(index: integer): TMerkRecord;
protected
// Freigabe des Speichers
procedure Notify(Ptr: Pointer; Action: TListNotification); override;
public
// Zugriff auf den Rekord
property Items[index :integer] :TMerkRecord read GetItems; default;
// Neuen Record hinzufügen
function Add(R :TMerkRecord) :integer;
end;
implementation
type
PMerkRecord = ^TMerkrecord;
{ TMerkList }
function TMerkList.Add(R: TMerkRecord): integer;
var
P :PMerkRecord;
begin
P:= new(PMerkRecord);
P^:=R;
Result:=inherited Add(P);
end;
function TMerkList.GetItems(index: integer): TMerkRecord;
begin
Result:=PMerkRecord(inherited Items[Index])^;
end;
{Strings und dynamische Arrays müssen auf die Länge von 0 gesetzt werden.
Da Variants alle Typen enthalten können, müssen sie auf NULL gesetzt werden}
procedure TMerkList.Notify(Ptr: Pointer; Action: TListNotification);
begin
if Action=lnDeleted then begin
PMerkRecord(Ptr).s:='';
PMerkRecord(Ptr).V:=Null;
SetLength(PMerkRecord(Ptr).a,0);
Dispose(Ptr);
end;
inherited;
end;
end.
Tags:
Delphi Delphi 2009