AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Probleme mit dem ListView

Ein Thema von MicMic · begonnen am 26. Mai 2018 · letzter Beitrag vom 1. Jun 2018
Antwort Antwort
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Probleme mit dem ListView

  Alt 28. Mai 2018, 20:09
Hallo Michael, ja tobe Dich mal mit der ListBox aus. FindFirst, FindNext und FindClose ist ein sehr sehr langsames Mittel.
Ich bin gespannt wie dein Resultat endet.
Nach wie vor kannst Du Dir ja mal das ShellTreeView Demo von weiter oben anschauen und feststellen das es im Vergleich zum manuellen durchforsten eines Verzeichnisses ein gewaltiges plus an Geschwindigkeit gibt.
Zur Demonstration als Vergleich empfehle ich das Windows/System32 Verzeichnis laden zu lassen.

Hier hab ich ein Quelltext-Schnippsel von stackoverflow für die ListBox Variante.
Delphi-Quellcode:
var
  Form1: TForm1;
  FilePath: TStringList;

implementation

{$R *.dfm}

procedure FindFiles(FilesList: TStrings; FilesPath: TStrings;
  StartDir, FileMask: string);
var
  SR: TSearchRec;
  DirList: TStringList;
  IsFound: Boolean;
  i: integer;
begin
  if StartDir[length(StartDir)] <> '\then
    StartDir := StartDir + '\';

  IsFound := FindFirst(StartDir + FileMask, faAnyFile - faDirectory, SR) = 0;
  while IsFound do
  begin
    FilesPath.Add(StartDir + SR.Name);
    FilesList.Add(SR.Name);
    IsFound := FindNext(SR) = 0;
  end;
  FindClose(SR);

  DirList := TStringList.Create;
  IsFound := FindFirst(StartDir + '*.*', faAnyFile, SR) = 0;
  while IsFound do
  begin
    if ((SR.Attr and faDirectory) <> 0) and (SR.Name[1] <> '.') then
      DirList.Add(StartDir + SR.Name);
    IsFound := FindNext(SR) = 0;
  end;
  FindClose(SR);

  for i := 0 to DirList.Count - 1 do
    FindFiles(FilesList, FilePath, DirList[i], FileMask);

  DirList.Free;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FilePath.Free;
end;

procedure TForm1.sButton1Click(Sender: TObject);
begin
  FilePath := TStringList.Create;
  FindFiles(sListBox1.Items, FilePath, EditStartDir.Text, '*.*');
  {FilePath is where full file path saved, EditStartDir is where to search}
end;

procedure TForm1.sListBox1Click(Sender: TObject);
begin
If sListBox1.ItemIndex > -1 then
  sEdit2.Text := FilePath.Strings[sListBox1.ItemIndex];
end;

end.
Eine weitaus schnellere ListBox Methode wäre es so zu machen
Delphi-Quellcode:
var s: string;
begin
  s := 'c:\windows\*.*'#0;
  ListBox1.Perform(LB_DIR, DDL_READWRITE, LongInt(@s[1]));
end;
Viel Spass beim experimentieren!
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: Probleme mit dem ListView

  Alt 1. Jun 2018, 11:44
Also mit der ListBox schaut es gut aus und ja, das "System32" Verzeichnis nehme ich auch immer.
Das ShellListView Demo habe ich mir angeschaut aber es ist recht vollgepackt. So viel schneller ist es auch nicht. Derzeit ist meines schneller aber ich bin ja auch noch nicht ganz fertig. Das mit FindFirst/FindNext geht bei mir auch etwas anders. Ich lade das Verzeichnis mit weiteren Infos in ein Record rein. In der Listbox hole ich mir dann im DrawItem Abschnitt die Infos, die ich benötige.

Habe mich auch mal mit einem TThread probiert, um Icons im Hintergrund nachzuladen. Wäre das der richtige Weg? Das klappte aber noch nicht so ganz. Jetzt räume ich erst mal wieder das Listing auf. Das mache ich immer so. Erst ein wenig programmieren und wenn was geht, dann wird im Listing aufgeräumt, formatiert und kommentiert. Sonst verliert man den Durchblick

Aber der Total-Commander ist schon recht schnell. Eine Meisterarbeit

Michael
  Mit Zitat antworten Zitat
Antwort Antwort

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:12 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