Einzelnen Beitrag anzeigen

Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#2

Re: Aus Pointer Varialbe wiederherstellen funktioniert nicht

  Alt 14. Jul 2008, 00:38
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
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat