![]() |
Re: Clear von TList überschreiben mit Objekten
Ich habe es jetzt so:
Delphi-Quellcode:
Aber da bekomme ich in der Assign-Methode auch wieder eine AV. :gruebel:
procedure TPageCollection.Clear;
var i: Integer; begin for i := Self.FInnerList.Count - 1 downto 0 do begin TObject(Self.FInnerList.Items[i]).Free; Self.FInnerList.Items[i] := Nil; Self.FInnerList.Delete(i); end; // inherited; //FInnerList.Clear; end; Die Logdatei von FastMM wird übrigens immer größer. :wall: |
Re: Clear von TList überschreiben mit Objekten
|
Re: Clear von TList überschreiben mit Objekten
@Luckie: könntest du mal die deklaration von TPageCollection posten?
|
Re: Clear von TList überschreiben mit Objekten
@David: Weil ich damit am Anfang unerklärliche Probleme hatte.
Delphi-Quellcode:
TPageCollection = class(TObject)
private FInnerList: TList; FPageParent: TWinControl; FPageOptions: TPageProperties; FScaleFactor: Double; FOnAfterAdd: TOnAfterAdd; FOnAfterDelete: TOnAfterDelete; FOnProgress: TOnProgress; FOnSaveFinish: TOnSaveFinish; FOnLoadFinish: TOnLoadFinish; { Getter und Setter } {} function GetScaleFactor: Double; procedure SetScaleFactor(const Value: Double); function GetPageParent: TWinControl; procedure SetPageParent(const Value: TWinControl); function GetItem(Index: Integer): TImageEnVect; procedure SetItem(Index: Integer; Item: TImageEnVect); function GetPageOptions: TPageProperties; procedure SetPageOptions(PageOptions: TPageProperties); { Private Methoden } {} procedure Renumber; procedure RescalePage(Page: TImageEnvect); public constructor Create; overload; destructor Destroy; override; { Methode zum "Clonen" der Seitenliste } procedure Assign(Source: TPageCollection); { TList Methoden } {} procedure Add(Item: TImageEnVect); procedure Clear; function Count: Integer; procedure Delete(Index: Integer); procedure Insert(Index: Integer; Item: TImageEnVect); { Fotobook spezifische Erweiterungen für Liste } {} { Aktualisiert Seite in der Liste und skaliert sie zurück. } procedure UpdatePage(Page: TImageEnVect); { Speichert eine Seite ohne sie zurück zu skalieren. } procedure Save(Page: TImageEnVect); { Liefert den Index einer Seite nach Namen. } function FindItemByName(const Name: WideString): Integer; { Speichert die Seiten in einem eignen, komprimierten Dateiformat mit Bildern und XML-Datei zur Beschreibung der Seiten. Ausgelagert in die Klasse TPagesIO. } procedure SavePages(const Filename: WideString); { Läd Seiten aus einer Fotobuchdatei. Ausgelagert in die Klasse TPagesIO. } procedure LoadPages(const Filename: WideString); { Öffentliche Eigenschaften }{} property ScaleFactor: Double read GetScaleFactor write SetScaleFactor; property PageParent: TWinControl read GetPageParent write SetPageParent; property Items[Index: Integer]: TImageEnVect read GetItem write SetItem; property PageOptions: TPageProperties read GetPageOptions write SetPageOptions; property OnAfterAdd: TOnAfterAdd read FOnAfterAdd write FOnAfterAdd; property OnAfterDelete: TOnAfterDelete read FOnAfterDelete write FOnAfterDelete; property OnProgress: TOnProgress read FOnProgress write FOnProgress; property OnSaveFinish: TOnSaveFinish read FOnSaveFinish write FOnSaveFinish; property OnLoadFinish: TOnLoadFinish read FOnLoadFinish write FOnLoadFinish; end; |
Re: Clear von TList überschreiben mit Objekten
Könnte es sein das:
Delphi-Quellcode:
evtl so aussehen muss?:
Page.ObjUserData[hObjSource] := Source.Items[i].ObjUserData[hObjSource];
Delphi-Quellcode:
Page.ObjUserData[hObj] := Source.Items[i].ObjUserData[hObjSource];
|
Re: Clear von TList überschreiben mit Objekten
Stimmt, das war ein Fehler, aber der ändert leider nichts an der AV. :cry:
|
Re: Clear von TList überschreiben mit Objekten
Geh doch mal mit dem Debugger rein und schau, bei welcher Anweisung er im Assign knallt. Das grenzt die Möglichkeiten doch schon arg ein :)
|
Re: Clear von TList überschreiben mit Objekten
Hallo,
vielleicht liegt es am class(TObject), dass muss doch nicht rein. Mach doch mal ein kleines kompilierbares Bsp und hänge es an dein Posting. Heiko |
Re: Clear von TList überschreiben mit Objekten
Dem Compiler ist es ziemlich egal ob du schreibst =class oder =class(TObject). Das Ergebnis ist das gleiche :)
|
Re: Clear von TList überschreiben mit Objekten
Mir nicht ;)
cih würde das TObject(XXX).Free ersetzen durch die richtige Klasse. Die internen Assign's macht mir auch Sorgen, nicht dass du dort irgendwo direkt Pointer aus Source übergibst. Wo genau im Assign kommt denn der Fehler ? Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:30 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-2025 by Thomas Breitkreuz