Thema: Delphi langsame Suche

Einzelnen Beitrag anzeigen

silentAMD

Registriert seit: 27. Sep 2003
203 Beiträge
 
Turbo Delphi für Win32
 
#1

langsame Suche

  Alt 7. Mär 2004, 10:17
hi,

in meinem programm ist eine kleine datei- und ordnersuche enthalten:

Delphi-Quellcode:
procedure TFenster.bSeaSClick(Sender: TObject);
procedure GetSear(dir, mask: string; OnlyDirs: Boolean);
var rec: TSearchRec; found: Integer;
begin
dir := Slash(dir);
found := FindFirst(dir+mask, faAnyFile, rec);
try while (found = 0) and (FEND=False) do begin
 if ((OnlyDirs and (rec.Attr and faDirectory <> 0))
 or not OnlyDirs and not(rec.Attr and faDirectory <> 0))
 and not(rec.Attr and faHidden <> 0)
 and not(UPPERCASE(dir+rec.Name) = UPPERCASE(Application.ExeName))
 and ((rec.Name <> '.') and (rec.Name <> '..')) then
 with lSea.Items.Add do begin
  Caption := rec.Name;
  SubItems.Add(dir);
 end;
 Application.ProcessMessages;
 found := FindNext(rec);
 end;
finally
 FindClose(rec);
 PanCh(lSea);
end;
found := FindFirst(dir+'*.*', faDirectory, rec);
try while (found = 0) and (FEND=False) do begin
 if (rec.Attr and faDirectory > 0) and (rec.Name <> '.') and (rec.Name <> '..') then
 GetSear(dir+rec.Name, mask, OnlyDirs);
 found := FindNext(rec);
 end;
finally
 FindClose(rec);
end;
end;
begin
if not(DriveOnline(True, c)) then Exit;
ECol := True;
Tim.Enabled := False;
Panel.Panels[2].Text := 'Es wird gesucht...';
mDir.Enabled := False;
bSeaS.Enabled := False;
bSeaN.Enabled := True;
bSeaN.Caption := 'Suche anhalten';
eSea.Enabled := False;
lSea.MultiSelect := cDatS.Checked;
lSea.Enabled := False;
lSea.Clear;
FEND := False;
lSea.Items.BeginUpdate;
if cDatS.Checked then
GetSear(c+':','*'+eSea.Text+Filter.Text, False)
else if cDirS.Checked then
GetSear(c+':','*'+eSea.Text+'*', True);
lSea.Items.EndUpdate;
if FEND = True then Application.MessageBox('Die Suche wurde abgebrochen.',PChar(a),16)
else FEND := True;
Pan('Suche beendet');
lSea.Enabled := True;
eSea.Enabled := True;
bSeaN.Caption := 'Neue Suche';
bSeaS.Enabled := True;
mDir.Enabled := True;
lSea.SetFocus;
end;
das einlesen der dateien braucht aber saulang. in der windowssuche ist alles ruckzuck eingelesen.
wie kann man das beschleunigen (mit einer anderen komponente ??)?

PLEASE HELP!!


PS: den trick mit begin- und endupdate ist mir schon bekannt.

[edit=sakura] [code] mit [delphi] getauscht. Mfg, sakura[/edit]
  Mit Zitat antworten Zitat