procedure TfrmMain.FindFilesOnDisk(Dir : string);
var SR : TSearchRec;
Err : integer;
i, j : integer;
st : string;
begin
if (Dir[Length(Dir)] <> '\') then Dir := Dir + '\';
Err := FindFirst(Dir + '*.*', faAnyFile, SR);
while Err = 0 do
begin
j := 0;
st := AnsiUpperCase(SR.Name);
if lbDirs.Items.Count > 0 then //Если в списке есть каталоги
//Проверить, нет ли среди них
for i := 0 to lbDirs.Items.Count - 1 do
if lbDirs.Items[i] = st then //найденного
begin
j := 1;
break;
end; //if lbDirs.Items[i] = st then
if j = 0 then
begin
if (SR.Name <> '.') and
(SR.Name <> '..') and
((SR.Attr and faDirectory) <> 0) then
begin
inc(NumDir);
DirList.Add(Dir + st);
frmMain.sbMain.Panels[1].Text := IntToStr(NumDir);
pbFind.Position := NumDir;
Application.ProcessMessages;
FindFilesOnDisk(Dir + SR.Name);
end; //if (SR.Name <> '.') and
end; //if j = 0 then
Err := FindNext(SR);
end;
end;
Объяснение:
алг
нач
нц пока справа свободно
вправо
закрасить
кц
нц пока снизу свободно
вниз
закрасить
кц
нц пока слева свободно
влево
закрасить
кц
нц пока сверху свободно
вверх
закрасить
кц
кон