Einzelnen Beitrag anzeigen

bluescreen25

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

Probleme mit VirtualListView

  Alt 14. Okt 2006, 10:58
Hallo, wir haben bei dem Listview eine 1000fach angesprochene Verlangsamung drin.
Haben da auch die CodeSchnipsel versucht zu interpretieren.
Leider bekommen wir das mit dem VirtualListView nicht hin.
Kann da jemand mal einen Ansatz geben ?

Delphi-Quellcode:
//Dateien und Ordner in die ListView eintragen
procedure ShowFiles(ShowList: TListView; Rekursive: Boolean; ShowDir: Boolean);
var
  FileLst, DirLst: TStrings;
  I: Integer;
begin
  if ShowList.Name = 'mediathen
  begin
    if ShowList.Selected <> nil then Path := Copy(ListMedia.Selected.SubItems.Text,0, length(ListMedia.Selected.SubItems.Text)- 2);
    if FileExists(Path) then //Ist der Pfad eine Datei ?
    begin
      Path := GetPreviousDirectory(Path);
      Path := GetPreviousDirectory(Path);
    end;
    DirLst := TStringList.Create; //Temponäre Listen erstellen
    FileLst := TStringList.Create;
    FindAllFiles(DirLst, FileLst, Path, FileMask, Rekursive, True, True); //Alle Ordner und Dateien in Liste schreiben
    ShowList.Clear;
    if ShowDir then //Ordner anzeigen wenn True
    begin
      for I := 0 to DirLst.Count-1 do //Ordner in ListView eintragen
      begin //Die Ordner kommen zuerst in das ListView
        with ShowList.Items.Add do //Neuen Ordner hizufügen
        begin
          Caption := ExtractFilename(DirLst[I]); //Wir wollen nur den Ordnernamen
          SubItems.Text := DirLst[I]; //Den Pfad brauchen wir auch
          ImageIndex := 0; //Ordner-Icon zuweisen
        end;
      end;
    end;
    for I := 0 to FileLst.Count-1 do //Dateien in ListView eintragen
    begin //Die Dateien werden unter den Ordnern angezeigt
      with ShowList.Items.Add do //Neue Datei hinzufügen
      begin
        Caption := ExtractFilename(FileLst[I]); //Wir wollen nur den Dateinamen
        SubItems.Text := FileLst[I]; //Den Pfad brauchen wir auch
        ImageIndex := 1; //Datei-Icon zuweisen
      end;
    end;
    DirLst.Free; //Temponäre Listen freigeben
    FileLst.Free;
  end;
end;

Delphi-Quellcode:
procedure FindAllFiles(DirList:TStrings; FileList: TStrings; RootFolder: string; Mask: string; Recurse: Boolean = True; AddFolderNames: Boolean = False; IgnoreMaskAtFolderNames: Boolean = True);
  procedure LFindAllFiles(AParentFolder: String);
  var LSearchRec: TSearchRec;
  begin
    Application.ProcessMessages;
    if FindFirst(AParentFolder + '*', faAnyFile, LSearchRec) = 0 then
    begin
      repeat
        if (LSearchRec.Name <> '.') and (LSearchRec.Name <> '..') then
        begin
          if LSearchRec.Attr and faDirectory = faDirectory then
          begin
            if AddFolderNames and
               (IgnoreMaskAtFolderNames or Like(AnsiLowerCase(LSearchRec.Name), Mask)) then
              DirList.AddObject(AParentFolder + LSearchRec.Name, TObject(True));
            if Recurse then
              LFindAllFiles(AParentFolder + LSearchRec.Name + '\');
          end
          else if Like(AnsiLowerCase(LSearchRec.Name), Mask) then
            FileList.AddObject(AParentFolder + LSearchRec.Name, TObject(False));
        end;
      until FindNext(LSearchRec) <> 0;
      FindClose(LSearchRec);
    end;
  end;
begin
  Mask := AnsiLowerCase(Mask);
  LFindAllFiles(IncludeTrailingPathDelimiter(RootFolder));
end;
Viele Grüße, bluescreen25
  Mit Zitat antworten Zitat