Einzelnen Beitrag anzeigen

bluescreen25

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

Re: Aktualisierung ListView mit FindAllFiles

  Alt 28. Okt 2006, 13:29
Damit die Frage auch beantwortet ist:
Nochmal zur Erinnerung: Es geht um die Kompo EasyListView im schnellen virtualMode, kann aber auch in der normalen ListView in virtualMode genutzt werden.


1.) In FindAllFiles werden die gefundenen Ordner und Files jeweils in eine StringList gebannt.

Delphi-Quellcode:
...
   Search := True;
...
     begin
       ShowList.Items.Clear; //ListView
       FileLst.Clear; //StringList
       DirLst.Clear; //StringList
       LastAdded:=0; //Zähler bisher aktualisierte Items in ListView
       tiAddTimer.Enabled := True; //addTimer aktualisiert ListView
       FindAllFiles(DirLst, FileLst, Path, FileMask, Rekursive, False, True);//FileSuche
       form1.AddSearchItems(FileLst.count); //Aktualisierung nach FileSuche beendet
     end; //bzw nach letzter addTimer-Aktualisierung
...
2.) Ein Timer ruft in Intervallen die AddVirtual-procedure auf.
Timer beendet sich selbst nach letztem Durchlaufen, damit nach Ende der Suche auch die letzten
gefundenen Einträge übergeben werden.

Delphi-Quellcode:
procedure TForm1.tiAddTimerTimer(Sender: TObject);//TimerInterval bestimmt erste
begin //und folgende Aktualisierungen //guter Mittelwert = 500 ms
    ShowLabel('songvalue', Format('%.0n Song(s) in Playlist', [1.0 * FileLst.Count]));
    if Search then
      AddSearchItems(FileLst.count) // procedure Files AddVirtual
    else
      tiAddTimer.Enabled := False; //FileSuche/Aktualisierung beendet
end;
3.) Die jeweils noch nicht geaddeten Einträge werden beim timerDurchlauf angefügt.

Delphi-Quellcode:
procedure TForm1.AddSearchItems(Count: Integer);
var
  i: Integer; // Items Virtual geaddet
begin
   ListMedia.BeginUpdate; //ListView NeuzeichnungsStop
   ListMedia.Items.ReIndexDisable := True;
   LastAdded:=0; //Zähler bisher aktualisierte Items in ListView
   LastAdded := FileLst.Count - ListMedia.Items.count;//Count,wichtig für Virtual
  try
    for i := 0 to LastAdded - 1 do
      ListMedia.Items.AddVirtual; //virtual geaddete Items, sichtbar durch:
  finally //procedure SkinListItemGetCaption
    ListMedia.Items.ReIndexDisable := False;
    ListMedia.EndUpdate; //ListView NeuzeichnungsStop aufgehoben
  end;
end;

4.) Die eigendliche Anzeige der Items im ListView

Delphi-Quellcode:
procedure TForm1.SkinListItemGetCaption(Sender: TCustomEasyListview;Item: TEasyItem; Column: Integer; var Caption: WideString);
var idx : integer; // Index of Dir/FileList
    s : TStrings; // Dir/FileList
    t : integer; // ohne Dateiendung (4 Stellen gekürzt)
begin
  case Column of
    0:begin
       if item.index < DirLst.Count then
         begin
           s := DirLst;
           idx := item.Index;
           t := 0;
         end
       else
         begin
           s := FileLst;
           idx := item.index - DirLst.Count;
           t := 4;
         end; // gekürzte Filenames in Column 0 von ListView
       caption := (copy(ExtractFilename(s.strings[idx]),0, length(ExtractFilename(s.strings[idx]))-t));
      end;
    1:begin
        if item.index < DirLst.Count then
         begin
           s := DirLst;
           idx := item.Index;
         end
       else
         begin
           s := FileLst;
           idx := item.index - DirLst.Count;
         end;
       caption := s.strings[idx]; // komplette Pfade in Column 1 von ListView
      end;
    end;
end;
Viele Grüße,bluescreen25
  Mit Zitat antworten Zitat