![]() |
Listbox mit Lieder füllen funktioniert nicht
Hallo, ich bin gerade dabei einen MP3 Player zu programmieren.
Ich wähle in einem BrowseDialog einen Musikordner aus:
Delphi-Quellcode:
zum Schluss wird die function MP3ListeFuellen aufgerufen...
procedure TForm1.btnOpenFolderClick(Sender: TObject);
var mp3Folder : string; begin mp3Folder := BrowseDialog('Wähle einen Ordner mit Liedern aus:', BIF_RETURNONLYFSDIRS); if mp3Folder = '' then Exit; txtFolder.Caption := mp3Folder; MP3ListeFuellen(mp3Folder, mp3List.Items); end;
Delphi-Quellcode:
er durchläuft die Schleife, füllt mir aber nicht die ListBox ..
procedure MP3ListeFuellen(Folder: string; sl: TStrings);
var Rec : TSearchRec; mp3List: TListBox; begin sl.Clear; if SysUtils.FindFirst(Folder + '*.mp3', faAnyFile, Rec) = 0 then try repeat sl.Add(Rec.Name); until SysUtils.FindNext(Rec) <> 0; finally SysUtils.FindClose(Rec); end; end; Kann mir bitte jemand helfen? |
AW: Listbox mit Lieder füllen funktioniert nicht
Findet er denn Dateien?
|
AW: Listbox mit Lieder füllen funktioniert nicht
Hi Luckie,
ja im "Rec.Name" wird der Mp3 Name gespeichert .... und geht alle Mp3 durch, die in dem Ordner sind. bin schon eine ganze Weile dabei, eine Lösung zu finden .... |
AW: Listbox mit Lieder füllen funktioniert nicht
Zitat:
Dann solltest du mal schauen, ob in deiner Ordner-Variablen der Pfad mit abschließendem '\' steht. Und in deinem Code fehlt noch ein FindClose. Bernhard PS: Das
Delphi-Quellcode:
brauchst du eigentlich gar nicht, da ja Windows meist die erste Uses ist und SysUtils danach eingebunden wird und somit die Aufrufe aus der Windows-Unit überschreibt.
SysUtils.
|
AW: Listbox mit Lieder füllen funktioniert nicht
Hallo,
dein Übergabeparameter sl ist nur "oneway" und liefert nicht zurück. Mach einmal ein var davor, dann sollte es klappen (var sl : TStrings) Ciao Frank |
AW: Listbox mit Lieder füllen funktioniert nicht
Nein, var ist nicht nötig, da es sich bei Objektinstanzen um Pointer handelt.
|
AW: Listbox mit Lieder füllen funktioniert nicht
Hallo Detlef,
mmmh, procedure MP3ListeFuellen ist für mich erst einmal nur eine Prozedur. Ciao Frank |
AW: Listbox mit Lieder füllen funktioniert nicht
Das hat aber nichts damit zu tun, dass Objektinstanzen als Argumente automatisch by Reference übergeben werden.
|
AW: Listbox mit Lieder füllen funktioniert nicht
Zitat:
Wenn in den TStrings was drin steht, dann ausserhalb der Prozedur einer BESTEHENDEN TListBox zuweisen mit ListBox.Items.Assign(); |
AW: Listbox mit Lieder füllen funktioniert nicht
Die Variable ist lediglich überflüssig, zugegriffen wird ja auf den Parameter.
|
AW: Listbox mit Lieder füllen funktioniert nicht
Wo sieht man das? Die einzeige ListBox, deren Füllen lt. Subject nicht funktioniert ist lokal in der Prozedur.
|
AW: Listbox mit Lieder füllen funktioniert nicht
Kann es sein, dass er kein Element in der Listbox findet?
Siehe
Delphi-Quellcode:
Oder seh ich da was falsch?
sl.Clear;
|
AW: Listbox mit Lieder füllen funktioniert nicht
Ich gehe davon aus, das die mp3list visuell auf dem Form liegt und über die Prozedur
Delphi-Quellcode:
MP3ListeFuellen(mp3Folder, mp3List.Items);
zum Füllen übergeben wird. In der Prozedur MP3ListeFuellen steht noch eine nicht benutzte Definition. Ciao Frank |
AW: Listbox mit Lieder füllen funktioniert nicht
Zitat:
|
AW: Listbox mit Lieder füllen funktioniert nicht
Zitat:
|
AW: Listbox mit Lieder füllen funktioniert nicht
Zitat:
Was passiert denn nun bei Folgendem?
Delphi-Quellcode:
if SysUtils.FindFirst(Folder + '/*.mp3', faAnyFile, Rec) = 0 then
|
AW: Listbox mit Lieder füllen funktioniert nicht
Zitat:
[edit] Wie ist es denn so?
Delphi-Quellcode:
[/edit]
procedure MP3ListeFuellen(Folder: string; sl: TStrings);
var Rec : TSearchRec; // mp3List: TListBox; begin Assert(Assigned(sl)); sl.BeginUpdate; try Folder := IncludeTrailingPathDelimiter(Folder); sl.Clear; if SysUtils.FindFirst(Folder + '*.mp3', faAnyFile, Rec) = 0 then try repeat sl.Add(Rec.Name); until SysUtils.FindNext(Rec) <> 0; finally SysUtils.FindClose(Rec); end; finally sl.EndUpdate; end; end; |
AW: Listbox mit Lieder füllen funktioniert nicht
Hi, danke für die Rückmeldungen.
Bin auf Arbeit, werde mich heute Abend von zu Hause aus melden. |
AW: Listbox mit Lieder füllen funktioniert nicht
Hallo,
bei mir funktioniert auch der OriginalCode.. @Detlef: Hattest Recht mit var, pointer ;-) Ciao Frank |
AW: Listbox mit Lieder füllen funktioniert nicht
Der Originalcode funktioniert aber nur, wenn man das Verzeichnis auch mit einem Backslash abschließt. Übergibt man als sl-Parameter nil, dann knallt es.
|
AW: Listbox mit Lieder füllen funktioniert nicht
schon klar, "bullshit in = bullshit out", ohne Backslash halt leere Liste ;-)
|
AW: Listbox mit Lieder füllen funktioniert nicht
Siehste, deshalb stell ich sicher, dass das Dingen mit Backslash abschließt. Man muss ja immer mit dem Schlimmsten rechnen, am Ende gar mit Usern :lol:
|
AW: Listbox mit Lieder füllen funktioniert nicht
Zitat:
|
AW: Listbox mit Lieder füllen funktioniert nicht
Achja, was mir gerade einfällt: eine Listbox kann man auch prima per API (
![]() |
AW: Listbox mit Lieder füllen funktioniert nicht
Zitat:
|
AW: Listbox mit Lieder füllen funktioniert nicht
Also ich möchte gerne bei dieser Methode bleiben, nicht über API.
hab den geposteten Code von DeddyH ausprobiert und zusätzlich noch im FindFirst das Backslash eingebaut, Liste wird aber nach wie vor nicht gefüllt.
Delphi-Quellcode:
procedure MP3ListeFuellen(Folder: string; sl: TStrings);
var Rec : TSearchRec; begin Assert(Assigned(sl)); sl.BeginUpdate; try Folder := IncludeTrailingPathDelimiter(Folder); sl.Clear; if FindFirst(Folder + '/*.mp3', faAnyFile, Rec) = 0 then try repeat sl.Add(Rec.Name); until FindNext(Rec) <> 0; finally FindClose(Rec); end; finally sl.EndUpdate; end; end; Zitat:
|
AW: Listbox mit Lieder füllen funktioniert nicht
Hallo,
nun hast Du ja 2 \. Eines manuell in deinem FindFirst und das 2. über IncludeTrailingPathDelimiter. Entscheide dich für eines. Empfehlung: entferne es aus dem FindFirst. Ciao Frank |
AW: Listbox mit Lieder füllen funktioniert nicht
aahhh, danke !
hab mal einen anderen Musikordner genommen und es funktioniert .. jetzte müsste ich noch herausfinden wieso es bei manchen Ordnern funktioniert, bei manchen jedoch nicht ... |
AW: Listbox mit Lieder füllen funktioniert nicht
Hallo,
bemühe doch einmal den Debugger und steppe durch die Routine. Ich tippe einmal auf deine Folder-Variable. Ciao Frank |
AW: Listbox mit Lieder füllen funktioniert nicht
Zitat:
Nein, echt. Ich benutze exakt diesen Code, wenn ich Verzeichnisse auflisten will. Bernhard |
AW: Listbox mit Lieder füllen funktioniert nicht
Diese Frage habe ich mir öfters gestellt und es ließe sich auch leicht beantworten, indem ich ein paar Tests durchführe, aber ich habe im Moment keine Lust darauf, deshalb frage ich mal -
Was ist eigentlich, wenn man per Ansi Befehle Unicode Elemente (FindFirstFileA/FindFirstFileW) findet? Werden die ignoriert oder nur anders dargestellt? |
AW: Listbox mit Lieder füllen funktioniert nicht
Die Unicode-Zeichen (die wo nicht nach ANSI gewandelt werden können) werden als ? dargestellt
|
AW: Listbox mit Lieder füllen funktioniert nicht
Dann wird der 8.3-Kurzname verwendet/aufgelistet,
aber nur wenn auch die Ansi-API genutzt wird ... sonst muß man sich selber den Kurznamen aus dem SerarchResult raussuchen, sonst hat man durch die Unicode-Ansi-Umwandlung ein paar Fragezeichen im Namen. :stupid: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz