Entwickler-Ecke
Sonstiges (Delphi) - Listbox , Object auslesen
exoduscrises - So 01.05.05 18:40
Titel: Listbox , Object auslesen
Hallo zusammen,
ich nutze jetzt folgende Prozedur um eine Datei in die Listbox zu setzen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| type TEntry = class(TObject) fPath: string; 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
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 - So 01.05.05 19:00
Wieso benutzt Du einen schlichten Filename als Objekt ? :shock:
exoduscrises - 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 - So 01.05.05 19:12
hansa 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
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
exoduscrises - 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 - So 01.05.05 19:30
Wieso kommt immer so Kleinkram ? :mrgreen:
Habe mal eben einen Mediaplayer gebaut :
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 :
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 !'); MediaPlayer1.Open; MediaPlayer1.Play; end; |
exoduscrises - So 01.05.05 19:57
Eine Frage ist dann doch noch offen
wie kann ich jetzt alle Pfade mit Hilfe von
Delphi-Quelltext
1:
| Pfad:=TEntry(listbox1.items.objects[i]).fpath; |
in einer Datei speichern?
Tino - 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 - Mo 02.05.05 13:04
Naja ich hatte mir das in etwa so vorgestellt, aber das geht nicht :oops:
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; TempList := TStringList.Create; for Listbox1.ItemIndex='0' to Listbox1.ItemIndex=lbcount do begin StringList1.AddStrings(TEntry(listbox1.itemindex).fpath); end; end; StringList1.savetofile(SaveDialog1.FileName); end; end; |
exoduscrises - Di 03.05.05 14:28
so ging es dann
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. - 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:
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 ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!