Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Clear von TList überschreiben mit Objekten (https://www.delphipraxis.net/95209-clear-von-tlist-ueberschreiben-mit-objekten.html)

Luckie 3. Jul 2007 10:25

Re: Clear von TList überschreiben mit Objekten
 
Ich habe es jetzt so:
Delphi-Quellcode:
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;
Aber da bekomme ich in der Assign-Methode auch wieder eine AV. :gruebel:

Die Logdatei von FastMM wird übrigens immer größer. :wall:

mirage228 3. Jul 2007 10:32

Re: Clear von TList überschreiben mit Objekten
 
Wieso verwendest Du nicht einfach Delphi-Referenz durchsuchenTObjectList ?

mfG
mirage228

Phantom1 3. Jul 2007 10:34

Re: Clear von TList überschreiben mit Objekten
 
@Luckie: könntest du mal die deklaration von TPageCollection posten?

Luckie 3. Jul 2007 10:47

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;

Phantom1 3. Jul 2007 11:12

Re: Clear von TList überschreiben mit Objekten
 
Könnte es sein das:

Delphi-Quellcode:
Page.ObjUserData[hObjSource] := Source.Items[i].ObjUserData[hObjSource];
evtl so aussehen muss?:

Delphi-Quellcode:
Page.ObjUserData[hObj] := Source.Items[i].ObjUserData[hObjSource];

Luckie 3. Jul 2007 11:36

Re: Clear von TList überschreiben mit Objekten
 
Stimmt, das war ein Fehler, aber der ändert leider nichts an der AV. :cry:

Ghostwalker 3. Jul 2007 11:41

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 :)

hoika 3. Jul 2007 12:01

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

Ghostwalker 3. Jul 2007 12:03

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 :)

hoika 3. Jul 2007 12:06

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 13:57 Uhr.
Seite 2 von 4     12 34      

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