1. Danke für den Hinweis, die Klasse TChecklistItem ist natürlich auch definiert, TChecklistItems ist die Collection dazu.
Delphi-Quellcode:
type TChecklistItem = class(TcollectionItem) // Definition Typ TChecklistItem ---
private
tn : string;
function liesItemname: string; procedure schreibItemname(tx: string);
public
constructor create(AOwner: TCollection); override;
destructor Destroy; override;
property itemname: string read liesItemname write schreibItemname;
procedure Assign(Source: TPersistent); override;
procedure SaveToStream(Stream: TStream);
procedure ReadFromStream(Stream: TStream);
end;
// TChecklistItem --------------------------------------------------------------
constructor TChecklistItem.Create(AOwner: TCollection);
begin
inherited Create(AOwner);
end;
destructor TChecklistItem.Destroy;
begin
inherited Destroy;
end;
procedure TChecklistItem.SaveToStream(Stream: TStream);
var
CheckDummy : TCheckDummy;
begin
CheckDummy:=TCheckDummy.Create(Nil);
Try
CheckDummy.ItemTx := self.ItemTx;
CheckDummy.tn := self.tn;
stream.Position := stream.Size;
Stream.WriteComponent(CheckDummy);
Finally
end;
end;
procedure TChecklistItem.ReadFromStream(Stream: TStream);
var
CheckDummy : TCheckDummy;
begin
CheckDummy:=TCheckDummy.Create(Nil);
Try
Stream.ReadComponent(CheckDummy);
self.itemtext := CheckDummy.ItemTx;
self.itemname := CheckDummy.tn;
Finally
end;
end;
procedure TChecklistItem.Assign(Source: TPersistent);
begin
If Source is TChecklistItem then
begin
tn:=TChecklistItem(Source).itemname;
end
else
inherited Assign(Source);
end;
Zur Klasse TChecklistItem gehört ebenso ein Dummy for das Streaming, TCheckdummy. Schreiben und Lesen in den Stream funktioniert ohne Probleme.
2. Der Fehler kommt direkt beim Aufruf der Assign-Methode, aber nur beim Lesen:
Delphi-Quellcode:
procedure TChecklistItems.LoadFromStream(Stream: TStream);
var
CheckListDummy : TCheckListDummy;
begin
CheckListDummy := TCheckListDummy.Create(Nil);
Try
Stream.ReadComponent(CheckListDummy);
Assign(CheckListDummy.items); // Hier kommt die Zugriffsverletzung
Finally
CheckListDummy.Free;
end;
end;
Gruss JK