![]() |
AW: Record zu TStringlist hinzufügen
Ja und? Du kannst doch trotzdem den Destruktor überschreiben.
|
AW: Record zu TStringlist hinzufügen
Zitat:
Normale Class
Delphi-Quellcode:
hier wurden Create und Destroy definiert..
TMagnetic = class(TInterfacedPersistent, ISkinMagnetic, ISkinMagneticEx)
constructor Create; destructor Destroy; override; somit kann ich sie beim start und beenden verwenden/überschreiben oder was auch immer. Schicke ich ein Free wird Destroy aufgerufen. Beide werden aber in meiner Class TSprite nicht erstellt und auch nicht code mäßig aufgerufen. Intern allerdings schon verwaltet. Also erstelle ich meine Class wird im Quelltext Create gar nicht aufgerufen. Somit kann ich da auch gar nichts eingeben. Verstehst was ich meine? Ich rede nicht davon das es grundsätzlich nicht geht sondern davon das ich beides in meiner Class/Record nicht definiert habe. Ohne Definition kann ich dort Codemäßig auch nichts eingeben. Die Funktionen existieren nicht! Ich möchte sie auch in der Class nicht definieren diese soll weiterhin wie ein Record aussehen. gruss |
AW: Record zu TStringlist hinzufügen
Du kannst den Destruktor doch jederzeit hinzufügen:
Delphi-Quellcode:
Ändern tut sich dadurch ja sonst nichts.
TSprite = class
CtrlName: WideString; CtrlIndex: Integer; Left: Single; Top: Single; Width: Integer; Height: Integer; Scale: Single; Opacity: Byte; ShellTo: string; IconPath: WideString; WorkDir: WideString; UseLabel: string; CmdLine: WideString; ShowCmd: longint; h_Bitmap: HBitmap; Visible: Bool; public destructor Destroy; override; end; |
AW: Record zu TStringlist hinzufügen
Zitat:
Alles andere verwirrt nur. ;) Hatte meine Beitrag oben nochmal korrigiert. Sorry. Zitat:
gruss |
AW: Record zu TStringlist hinzufügen
Auf der anderen Seite wir TSprite von TObjectList verwaltet und auch von dieser freigegeben.
Es ist nicht nötig hier ein Destroy zu definieren und zu überschreiben. Das mit den HBitmaps mache ich vorsorglich da ich mir nicht sicher bin das TObjectList diese korrekt frei gibt. Und ja ich weiß das TObjectList den Destructor aufruft wenn ich diese Freigebe aber ich möchte den Destructor nicht definieren. gruss |
AW: Record zu TStringlist hinzufügen
Die Objektliste gibt nur die in ihr enthaltenen Objekte frei. Enthalten diese wiederum selbst erstellte Ressourcen o.ä., so ist es deren Aufgabe, sich um das korrekte Abräumen zu kümmern.
|
AW: Record zu TStringlist hinzufügen
Zitat:
Und es geht nicht weil nicht definiert. Also der Record soll als solcher Sichtbar erhalten bleiben (Auch wenn es hier niemand verstehen will ist halt meine Art) LOL Wichtig ist das die Resourcen frei gegeben werden. gruss |
AW: Record zu TStringlist hinzufügen
Ja, Du machst es von außen. Besser wäre es aber, wenn die Sprite-Objekte das selbst in die Hand nehmen. Und Du hast keinen Record mehr, finde Dich damit ab ;). Mal abgesehen von etwas mehr Overhead sollte man meiner persönlichen Meinung nach Klassen eh den Vorzug geben.
|
AW: Record zu TStringlist hinzufügen
Zitat:
Werde ihn definieren habe mich damit abgefunden. Danke euch. :) Zitat:
gruss |
AW: Record zu TStringlist hinzufügen
Habe es jetzt mal gemacht.
Und so wie gedacht wird TSprite Destroy nun doppelt aufgerufen. Einmal von TSprite und einmal von TObjectList. Verwende ich nur TSprites.Free(TObjectList) dann sind alle TSprite schon NIL bevor ich irgendetwas aufräumen kann. Sehe jetzt nicht wirklich den Vorteil davon das Destroy nun zweimal aufgerufen wird. Nun gut wie dem auch sei.
Delphi-Quellcode:
SPrite.Free;
Sprites.Free; gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:03 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