Autor Beitrag
exoduscrises
Hält's aus hier
Beiträge: 9

Win XP
D7 Pers
BeitragVerfasst: So 01.05.05 18:40 
Hallo zusammen,
ich nutze jetzt folgende Prozedur um eine Datei in die Listbox zu setzen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
 type 
  TEntry = class(TObject) // Typ 
    fPath: string// Dateipfad 
end

{...} 

var 
PLitem:TEntry; 
begin 
{...} 
PLitem:=TEntry.Create(); 
PLitem.fPath:=OpenDialog1.FileName; 
ListBox1.AddObject(CutPathName(OpenDialog1.FileName), PLitem); 
end;



und dachte mir ich kann jetzt im Nachhinein den Pfad also PLitem wieder aufrufen undzwar so

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
 
i := ListBox1.ItemIndex; 
{...} 
Pfad:=listbox1.items.objects[iplay]; 
{...}




geht aber leider nicht, kann mir vielleicht jemand weiterhelfen?
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: So 01.05.05 19:00 
Wieso benutzt Du einen schlichten Filename als Objekt ? :shock:

_________________
Gruß
Hansa
exoduscrises Threadstarter
Hält's aus hier
Beiträge: 9

Win XP
D7 Pers
BeitragVerfasst: So 01.05.05 19:10 
Es ging im Prinzip darum, mit einer Listbox eine Playlist für einen Mediaplayer zu machen. Das hat auch alles ganz gut geklappt so weit. Nun wollte ich aber, dass nicht immer der ganze Pfad in der Playlist steht sondern nur der Dateiname, da ich aber zum Dateinamen den Pfad brauche, damit es abgespielt werden kann, wollte ich ihn als Objekt mit anhängen.
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: So 01.05.05 19:12 
user profile iconhansa hat folgendes geschrieben:
Wieso benutzt Du einen schlichten Filename als Objekt ? :shock:

so wie ich das sehe, möchte er nur den Dateinamen (ohne Pfad) in der Listboxanzeige haben.
//edit: zu langsam ;)

was du brauchst, ist ein ein Typecast
ausblenden Delphi-Quelltext
1:
Pfad:=TEntry(listbox1.items.objects[iplay]).fpath;					


obwohl, man kann das auch etwas verfeinernen. Das Fpath finde ich unglücklich, da die variablen mit F immer die privaten sind. Außerdem könntest du dir einen eigenen constructor schreiben, wo du beim create gleich den Pfad übergibst.
Cutpathname scheint was eigenes zu sein, brauchst du nicht. gugg dir in der OH exctractfilepath/dir an.
Und ich hoffe, du hast auch an das free geadcht, die Objects werden nicht automatisch freigegeben.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
exoduscrises Threadstarter
Hält's aus hier
Beiträge: 9

Win XP
D7 Pers
BeitragVerfasst: So 01.05.05 19:19 
Ok , danke erstmal so weit, ich probiers nochmal

Edit: Funktioniert so genau wie ich es mir vorstelle, vielen Dank nochmal :)
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: So 01.05.05 19:30 
Wieso kommt immer so Kleinkram ? :mrgreen:

Habe mal eben einen Mediaplayer gebaut :

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  if FindFirst(lblEdit1.Text+'\*.MP3', faAnyFile, sr) = 0 then begin
    repeat
      ListBox1.Items.Add (sr.Name);
    until FindNext(sr) <> 0;
    FindClose(sr);
    ListBox1.ItemIndex := 0;
  end;


Zur Erläuterung : lblEdit1 ist ein TLabeledEdit und da soll der Pfad rein. Der dient dazu, ihn auch zu speichern, aber das ist jetzt egal. sr ist ein TSearchRec. Abspielen geht so :

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
  MediaPlayer1.FileName := lblEdit1.Text + '\'+ ListBox1.Items [ListBox1.itemindex];
  Memo2.Lines.Add (MediaPlayer1.Filename+' wird gespielt !'); // zur Anzeige
  MediaPlayer1.Open;
  MediaPlayer1.Play;
end;

_________________
Gruß
Hansa
exoduscrises Threadstarter
Hält's aus hier
Beiträge: 9

Win XP
D7 Pers
BeitragVerfasst: So 01.05.05 19:57 
Eine Frage ist dann doch noch offen

wie kann ich jetzt alle Pfade mit Hilfe von
ausblenden Delphi-Quelltext
1:
Pfad:=TEntry(listbox1.items.objects[i]).fpath;					

in einer Datei speichern?


Zuletzt bearbeitet von exoduscrises am Mo 02.05.05 14:56, insgesamt 1-mal bearbeitet
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mo 02.05.05 08:09 
In dem du alle Einträge der Listbox durchgehst und jeweils den Path liest und in die Datei speicherst. Wo liegt genau das Problem?
exoduscrises Threadstarter
Hält's aus hier
Beiträge: 9

Win XP
D7 Pers
BeitragVerfasst: Mo 02.05.05 13:04 
Naja ich hatte mir das in etwa so vorgestellt, aber das geht nicht :oops:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
 procedure TForm1.ImgBtn15Click(Sender: TObject);
  var
  TempList: TStrings;
  lbindex, lbcount:integer;
  begin
   if SaveDialog1.Execute then
    begin
     if Listbox1.ItemIndex >= 0 then
       begin
        lbcount:=Listbox1.Items.Count;         //Anzahl der Listboxeinträge
        TempList := TStringList.Create;        //Stringlist erstellen
        for Listbox1.ItemIndex='0' to Listbox1.ItemIndex=lbcount // Alle Objekte aus der Listbox in die Stringlist laden
         do
          begin
           StringList1.AddStrings(TEntry(listbox1.itemindex).fpath); 
          end;
       end;
     StringList1.savetofile(SaveDialog1.FileName); // Stringliste speichern
    end;
  end;
exoduscrises Threadstarter
Hält's aus hier
Beiträge: 9

Win XP
D7 Pers
BeitragVerfasst: Di 03.05.05 14:28 
so ging es dann

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
 procedure TForm1.ImgBtn15Click(Sender: TObject);
  var
   sl: TStringList;
    s: string;
    e: TEntry;
  begin
   if SaveDialog1.Execute then
   begin
   sl := TStringList.Create;
   for i := 0 to Listbox1.Items.Count - 1 do begin
    e := TEntry(ListBox1.Items.Objects[i]);
    sl.Add(e.fpath);
   end;
   sl.SaveToFile(SaveDialog1.FileName);
   sl.Free;
  end;
  end;
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 03.05.05 15:32 
Hallo!

Du solltest mit einem Speicherschutzblock arbeiten, der sicherstellt, dass die Stringliste auch beim Auftreten einer Exception freiegegeben wird:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.ImgBtn15Click(Sender: TObject);
var
  sl: TStringList;
  s: string;
  e: TEntry;
begin
  if SaveDialog1.Execute then
  begin
    sl := TStringList.Create;
    try
      for i := 0 to Listbox1.Items.Count - 1 do
      begin
        e := TEntry(ListBox1.Items.Objects[i]);
        sl.Add(e.fpath);
      end;
      sl.SaveToFile(SaveDialog1.FileName);
    finally
      sl.Free;
    end;
  end;
end;


Außerdem habe ich den Quelltext mal anständig formatiert ;-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".