Einzelnen Beitrag anzeigen

Muetze1
(Gast)

n/a Beiträge
 
#24

Re: StringList weiter reichen zur Eigentliche Klasse

  Alt 31. Okt 2007, 17:45
Zitat von mimi:
Ja, weil ich auch die Möglichkeit haben wollte eine m3u Datei in eine pls Datei umzuwandeln.
und das geht meiner meinung nach nur so.
Aber damit überschreibst du dir die in fPlaylist vorhandene Instanz. Diese geht verloren (existiert immernoch, nur du kannst nirgendwo mehr drauf zugreifen). Die neue Instanz ist dann wieder komplett ohne Infos, Einstellungen, etc.

Und es geht noch anders. Du kannst dir, um in einem anderen Playlistenformat zu exportieren, dir einfach in der Playlisten-Basisklasse eine Methode bauen, welche die Titelinformationen aus einer anderen Playlisten-Basisklasse übernimmt. Somit sieht dein Export im Playlistenmanager so aus: (Pseudocode):

Code:
Export(AFileName, AType)
var
  lExportPlaylist: TBasePLaylist;
begin
  lExportPlaylist := CreatePlaylist(AType);
  try
    lExportPlaylist.ÜbernehmeTitel( fPlaylist );

    lExportPlaylist.SaveToFile( AFilename );
  finally
    lExportPlaylist.Free;
  end;
end;
Zitat von mimi:
warum gibst du hier PLM wieder frei ? Ich möchte ihn ja später noch verwenden.
Das ist die Hauptprocedure des Programmes. Dort erstelle ich den PLM, nutze ihn (in dem ich die Playlist lade & ausgebe) und danach gebe ich ihn wieder frei, da am Ende dieser Procedure auch das Programm zu Ende ist. Dabei ist es doch völligst unerheblich wie du das implementieren möchtest. Du kannst doch genauso das anlegen des PLM im OnCreate machen, das Laden im OnClick und das freigeben im OnDestroy. Wo sollte dort der Unterschied liegen?

Zitat von mimi:
Dort verknüpfe ich bei der Angebenden Playliste.
Der PLM hat dann schon die angebene Instanz von der Listbox. Warum reicht er diese nicht einfach nur weiter an die Playlistinstanz die er selber anlegt?

Zitat von mimi:
Wenn ich jetzt bei TPlayListM3U auf PlaylistItems zugreife müsste ich doch jetzt eigentlich die Listbox1.Items ansprechen, oder nicht ?
Ja, so lange es immernoch die selbe/gleiche Instanz ist. Wenn du zwischendurch (also zwischen der ersten Zuweisung des TStrings Objektes und dem jetzigen Zugriff z.B. wieder InitPlaylist() aufrufst, dann ist es eine andere Instanz - und die hat dann nicht mehr die TStrings Instanz sondern nil. Da es eine komplett andere Instanz ist.

Zitat von mimi:
und genau hier kommt es zu einem Fehler. Aber ich weiß nicht wo.
Debuggen! Der Debugger von Lazarus ist sehr gut nutzbar und hilfreich. Auch ein Breakpoint in der SetPlaylistItems des PLM etc würde vllt. zu mehr Erkenntnissen führen, weil dieser vllt. öfters und vllt. mit anderen Instanzen aufgerufen wird.

Zitat von mimi:
Die Listbox ist aber gefüllt.
Dann hast du immernoch irgendwo ein unnötige TStringList.Create drin und/oder weist der TPLaylistM3U Instanz eine andere Instanz zu, als die, welcher der PDM in fPlaylistItems hat.
  Mit Zitat antworten Zitat