Zitat von
mimi:
Zu 1: Danke ! Irgendwie dachte ich das würde TStrings auto. tuen bei der Freigabe.
Ja, hatte ich vermutet. Dies ist aber nicht der Fall, da die TStrings nichtmal wissen, ob da wirklich eine Instanz hinterlegt ist oder der Programmierer nicht vllt. einfach nur einen Integer reinpackt.
Zitat von
mimi:
Wenn im Playlisten Manger der Parameter FileName schon mit einem namen belegt ist, kann dieser Auto. genommen werden bei LoadFromFile, wenn der nicht genommen werden soll, muss man im LoadFromFile einen Parameter eingeben
Ok, das widerspricht ja nicht meiner Anpassung, schliesslich kann der Manager schauen ob sein Aufruf mit '' war und entsprechend den internen Filename weiterreichen zu der Playlist Instanz.
Zitat von
mimi:
Wenn du das bei der PlaylistBase meinst, ja, weil er soll ja was machen, und es soll überschrieben werden können, wenn es nötig ist.
Kannst du doch. Wenn du sowas schreibst:
Delphi-Quellcode:
type
type
TMyClass = class
end;
ist dies das gleiche wie
Delphi-Quellcode:
type
TMyClass = class(TObject)
end;
Das erste ist nur eine Kurzform. Du leitest immer (sofern du nichts anderes angibst) von TObject ab. Somit erbst du automatisch den als virtuell deklarierten Destructor von TObject. Du hast somit schon einen als virtuell deklarierten Destruktor.
Wenn du nun in TPlaylistBase deinen Destruktor definierst und virtual; dahinter vermerkst, dann führst du einen neuen Destruktor ein mit dem gleichen Namen und verdeckst den von TObject. Dadurch wird aber jeder Destructor-Aufruf der bei dem TObject.Destroy ankommt nicht mehr an dich weiter geleitet. Free, FreeAndNil() etc. rufen immer den Destruktor vom Typ TObject auf und somit wird deiner niemals aufgerufen. Und damit in abgeleiteten Klassen trotzdem immernoch der Destruktor aufgerufen wird, muss dieser virtuell sein und in nachfolgenden Klassen überschrieben werden. Somit: Nimm das virtual weg!
Zitat von
mimi:
zu 7: Ich weiß, aber das ist auch published sein kann, ist mir neu.
Sie bei den Formularen: Füge eine Komponente ein. Sie wird direkt unter dem class eingefügt und ist aber von einer anderen
Unit aus zugreifbar. Diese Elemente sind mindestens public, mMn aber sogar published (wegen dem Streaming zum wiederfinden der Komponenten beim Streaming).
Zitat von
mimi:
also nach einen ersten test geht es immer noch nicht so wie ich es wollte.
Ich habe ehrlich gesagt nur so über den Quellcode geschaut und geändert. Da das Assign() so offensichtlich war, habe ich nicht weiter geschaut.
Aber zu deinem Problem: Du rufst InitPlaylist() o.ä. im Manager auch vor dem Speichern auf. Dadurch legst du eine neue Instanz an. Rufst du vllt. das Speichern auf?
Ich schaue nochmal in mein Project und teste explizit.