Einzelnen Beitrag anzeigen

bluescreen25

Registriert seit: 27. Nov 2005
Ort: Geldern
229 Beiträge
 
Delphi 7 Enterprise
 
#16

Re: schnellere Procedure gesucht

  Alt 20. Dez 2005, 17:04
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
  Mit Zitat antworten Zitat