Вот процедура, которая выдаёт список файлов в папке и её подпапках. Как сделать, чтобы она показывала только те файлы, типы которых указаны в фильтре FilterComboBox?
procedure TForm1.FindFile(Dir:String);
var
SR:TSearchRec;
FindRes:Integer;
Dir1: string;
FileN: string;
begin
Dir1:=Dir;
Dir:=Dir+'\';
FindRes:=FindFirst(Dir+'*.*',faAnyFile,SR);
while FindRes=0 do
begin
if ((SR.Attr and faDirectory)=faDirectory) and
((SR.Name='.')or(SR.Name='..')) then
begin
FindRes:=FindNext(SR);
Continue;
end;
if ((SR.Attr and faDirectory)=faDirectory) then
begin
FindFile(Dir+SR.Name+'\');
FindRes:=FindNext(SR);
Continue;
end;
FileN := Dir1+Sr.Name;
Listbox1.Items.Add(Dir1+' - '+Sr.Name);
i:=i+1;
if Application.Terminated then Break;
Application.ProcessMessages;
FindRes:=FindNext(SR);
end;
Listbox1.Items.Add('--------------------------------');
FindClose(SR);
end;
ps: при замене '*.*' на FilterComboBox1.Filter в строке
FindRes:=FindFirst(Dir+'*.*',faAnyFile,SR);
процедура не выдаёт вообще ничего.
[Ответ]
Сообщение от :
FindFirst(Dir+ComboBox1.Items[ComboBox1.ItemIndex],faAnyFile,SR);
Соответсвенно при условии, что в свойстве Items уже лежит готовый список расширений
[Ответ]
Набросал процедуру выдирания... имхо устаревший компонент.
Сообщение от :
function ParseFilter: string;
var i,j: integer;
str, filter, name: string;
begin
Result:='';
filter:=form1.filtercombobox1.Filter;
name:=form1.filtercombobox1.Items[form1.filtercombobox1.Itemindex];
for i:=1 to length(filter) do
if i+length(name)+1<=length(filter) then
begin
str:='';
for j:=0 to length(name)-1 do
str:=str+filter[i+j];
if str=name then
begin
str:='';
j:=i+length(name)+1;
while (filter[j]<>'|') and (j<=length(filter)) do
begin
str:=str+filter[j];
inc(j);
end;
Result:=str;
exit;
end;
end;
end;
Пользоваться так:
Сообщение от :
FindFirst(Dir+parsefilter,faAnyFile,SR);
С тебя бо-о-о-ольшой сенкс (;
[Ответ]
Rаvel, спасибо о-о-о-огромное!
Я чайник, и знаний пока с ноготок, поэтому пользуюсь компонентами какими попало. Буду разбираться. (:
[Ответ]