Большой Воронежский Форум
» Программирование>Делфи: как для FindFirst задать маску из FilterComboBox?
Regard 18:37 15.06.2008
Вот процедура, которая выдаёт список файлов в папке и её подпапках. Как сделать, чтобы она показывала только те файлы, типы которых указаны в фильтре 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);
процедура не выдаёт вообще ничего. [Ответ]
Rаvel 21:07 15.06.2008

Сообщение от :
FindFirst(Dir+ComboBox1.Items[ComboBox1.ItemIndex],faAnyFile,SR);

Соответсвенно при условии, что в свойстве Items уже лежит готовый список расширений [Ответ]
Regard 21:40 15.06.2008
Rаvel, спасибо! А с FilterComboBox никак? [Ответ]
Rаvel 00:14 16.06.2008
Набросал процедуру выдирания... имхо устаревший компонент.

Сообщение от :
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);

С тебя бо-о-о-ольшой сенкс (; [Ответ]
Regard 16:09 16.06.2008
Rаvel, спасибо о-о-о-огромное!
Я чайник, и знаний пока с ноготок, поэтому пользуюсь компонентами какими попало. Буду разбираться. (: [Ответ]
Вверх