Zitat:
2.) List == mediaplayer_frm.PlayList_ListBox.Items wird mit .BeginUpdate/.EndUpdate gelockt und somit nicht ständig neu gezeichnet. Die TStrings dieser
VCL Objekte wie TListBox, TMemo, TComboBox sind nur Handler um direkt auf das Windows Fenster
Handle mit seiner internen Liste zuzugreifen. Das dauert alles sehr sehr lange und ist ineffizient.
noch mal eine Frage, wenn ich aber jetzt meine Playlist (TStringlist) mit List fülle, dann habe ich die Pfade dort drinstehen wo ich diese haben möchte für den Verlauf meines Programms.
Meine PlayList_Listbox soll daher parallel nur die Dateinamen erhalten. Nur wo und wie greife ich die hier am besten ab, ohne wieder alles zu verlangsamen ?
und wieso durchsucht der die Ordnerstruktur die ich auswähle (incl. Unterordner) und dann noch diejenige, die darüber liegt (eine Ebene höher) ???
Aufruf: (ist i.O. da mit alter Procedure schon gelaufen, habe unten Textdateien ausgelagert zum prüfen.
Delphi-Quellcode:
procedure Tmediaarchiv_frm.Dir_to_PlayList;
var Ext: TStringList;
dir: string;
begin
ext := TStringList.Create;
dir := mediaplayer_frm.spSkinSelectDirectoryDialog1.Directory;
//ext.Sorted := false;
Flag_File_search_stop := false;
begin
try
if config_frm.File_Mask_check_mp3.Checked = true then
ext.Add('.' + config_frm.File_Mask_check_mp3.Caption);
if config_frm.File_Mask_check_wav.Checked = true then
ext.Add('.' + config_frm.File_Mask_check_wav.Caption);
AllFilesWithExtension(dir,Playlist,ext);
finally
ext.SaveToFile('d:\ext.txt');
playlist.SaveToFile('d:\playlist.txt');
ext.Free;
end;
end;
Etwas angepasst, fehlten ein paar end; Mir scheint als liegt der Fehler unten beim ListUpdate, bin aber noch nicht fit genug um das zu korregieren. Es sieht so aus, als würde der Path innerhalb der Schleife umgeschrieben.... kann das ?
Delphi-Quellcode:
procedure Tmediaarchiv_frm.AllFilesWithExtension(const Path: String; List, Extension: TStrings);
var
Tick: Cardinal;
procedure DoSearch(const Path: String);
var
SR: TSearchRec;
begin
if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then
try
repeat
if GetTickCount >= Tick then
begin
Tick := GetTickCount + 100;
Application.ProcessMessages;
end;
if (SR.Attr and faDirectory <> 0) and (SR.Name <> '.') and (SR.Name <> '..') then
DoSearch(Path + SR.Name + '\')
else
if Extension.IndexOf(ExtractFileExt(SR.Name)) >= 0 then
List.Add(Path + SR.Name);
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
end;
begin
List.BeginUpdate;
try
Tick := GetTickCount + 100;
DoSearch(ExtractFilePath(Path));
mediaplayer_frm.PlayList_ListBox.Items.Addstrings(Playlist);
finally
List.EndUpdate;
end;
end;
Grüße bluescreen25