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]