Moin moin,
was ich dir unbedingt empfehlen würde ist eine ordentliche Code-Formatierung - ich hab den Quelltext kaum bis garnicht verstehen können.
Zweites großes Problem:
In Zeile 7 des zweiten Quelltextteils:
for i:=0 to self.SL_Point.count do
Du gehst in der Liste zu weit - du musst bis
SL_Pointer.Count - 1 gehen!
Drittes Mankro:
ich geh mal davon aus, dass
SL_Path eine normale StringList ist. Du kannst zu jedem Eintrag in der StringList noch ein Zusatzobjekt hinzufügen. Das geht mit
SL_Path.AddObject( den_string, das_objekt ). Somit kannst du die beiden Sachen - Pfad und Object-Instanz zusammen speichern.
Nun aber zum eigentlichen Problem: Wieso machst du eigentlich den Umweg über ein Pointer auf einen Pointer? An sich ist die Sache doch relativ simpel zu lösen:
Der Erste Teil: Erstellung und Speicherung der Daten
Delphi-Quellcode:
procedure TFmain.AddFileToSL(FileName: string);
var id3Tag : TID3Tag;
begin
id3Tag := TID3Tag.Create;
if id3Tag.CreateTag(FileName) then
begin
SL_Path.AddObject(FileName, id3Tag);
// hier der Rest mit den String-Grid
end else
id3Tag.Free;
end;
Der Zweite Teil: der Destructor (es ist viel Besser das OnDestroy-Event dafür zu nutzen - dafür ist es ja da
)
Delphi-Quellcode:
destructor TFMain.destroy;
var i : integer;
id3Tag : TID3Tag;
begin
for i:=0 to SL_Path.Count-1 do
begin
id3Tag := TID3Tag(SL_Path.Objects[i]);
id3Tag.Free;
// ich weiß gerade nicht, ob die StringList die übergebenen Objekte
// beim leeren auch automatisch freigibt. Daher setzt ich in diesem
// Beispiel sicherheitshalber die Variable auf nil - somit weiß die
// StringList (und auch dein Programm) - dass sich hier kein gültes
// Objekt mehr befindet
SL_Path.Objects[i] := nil;
end;
SL_Path.Free;
inherited destroy;
end;
(Alles ungetestet, da Delphi gerade nicht offen)
Ich hab dir jetzt zwar eine relativ fertige Lösung gegeben, aber ich wollt dir halt zeigen, was ich unter Code-Formatierung von oben meine. Vielleicht findest du den Code so auch besser lesbar