Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с поиском, запутался 
:(
    Опции темы
Pavelbej
Дата 10.10.2006, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 419
Регистрация: 5.7.2005

Репутация: нет
Всего: 6



 Вот код который ищет в папке изображения. Мне нужно искать и в подпапках.

Код

procedure TForm1.FindImages;
var  x : integer;
     DirInfo : TSearchRec;
     Attr:integer;
begin
     Attr := faAnyFile;

// BMP
     x := FindFirst (Dir+ '\*.bmp', Attr, DirInfo);
     while x=0 do
     begin
           if ((DirInfo.Attr and FaDirectory <> FaDirectory) and
              (DirInfo.Attr and FaVolumeId <> FaVolumeID)) then
           ListBox1.Items.Add (Dir+ '\'+ DirInfo.Name);
           Application.ProcessMessages;
           x := FindNext(DirInfo);
     end;
     SysUtils.FindClose (DirInfo);
end;


У меня просьба доработать этот код, других не предлагать - у меня уже есть, но там процедуре нужно указать папку а я работаю с папкой отдельно(исползую ее в других целях). То есть чтобы воспользоватся другим кодом, мне придется переписать всю программу.
Заранее благодарен.
Цитата



PM MAIL   Вверх
Matematik
Дата 10.10.2006, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 17
Всего: 50



Цитата(Pavelbej @  10.10.2006,  19:00 Найти цитируемый пост)
У меня просьба доработать этот код

Что тебя не устраивает?
PM MAIL WWW ICQ   Вверх
Pavelbej
Дата 10.10.2006, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 419
Регистрация: 5.7.2005

Репутация: нет
Всего: 6



Мне надо заменить это:

Код

procedure FindImages(Dir:String);
Var SR:TSearchRec;
    FindRes:Integer;
    PicFl:String;
begin
    PicFl:='*.jpg;*.jpeg;*.bmp;*.png;';
if Form1.CheckBox2.Checked then
FindRes:=FindFirst(Dir+'*.*',faAnyFile,SR)
else
FindRes:=FindFirst(Dir+'*.*',faArchive,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 // anee iaeaai eaoaeia, oi
         begin
            FindImages(Dir+SR.Name+'\'); 
            FindRes:=FindNext(SR); 
            Continue; // i?iaie?eou oeee
         end;
      if pos(lowercase(ExtractFileExt(SR.Name)),PicFl) > 0 then
      Form1.CheckListBox1.Items.Add(Dir+SR.Name);
      FindRes:=FindNext(SR);
   end;
   FindClose(SR);
end;


на это:

Код

procedure FindImages;


с возможностью поиска в подпапках. 
Первая процедура использует параметр - мне нужно без него. То есть я не могу использовать приведенный код так как в нем процедура вызывает сама себя еще раз с параметром, а в моей процедуре параметра нет. 
PM MAIL   Вверх
Yanis
Дата 10.10.2006, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Pavelbej,
А как по твоему рекурсия будет работать? С внешней переменной? Бредово....

Добавлено @ 18:50 
Ну т.е. возможно, но бред smile
Переделай процедуру сам... Заведи глобальную переменную и перед вызовом FindImages присваивай ей значение такое же как и у параметра.


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
volvo877
Дата 10.10.2006, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 14
Всего: 116



Код
procedure TForm1.FindImages;

  Procedure FindFile(Dir: string);
  Begin
    // ...
  End;

begin
  FindFile(Dir);
end;
Не устроит? 
PM MAIL   Вверх
Sunvas
Дата 10.10.2006, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(Yanis @  10.10.2006,  18:49 Найти цитируемый пост)
А как по твоему рекурсия будет работать? С внешней переменной? Бредово....

Это мне кажется вообще невозможно.
Цитата(Yanis @  10.10.2006,  18:49 Найти цитируемый пост)
Ну т.е. возможно, но бред 
Переделай процедуру сам... Заведи глобальную переменную и перед вызовом FindImages присваивай ей значение такое же как и у параметра.

Тогда толку от рекурсии?? - она все равно не будет работать.


Цитата(Pavelbej @  10.10.2006,  18:26 Найти цитируемый пост)
Мне надо заменить это:

Единственное умное решение, которое мне приходит в голову это:
Код

procedure Findimages;
procedure FindIm(Dir:String);
Var SR:TSearchRec;
    FindRes:Integer;
    PicFl:String;
begin
    PicFl:='*.jpg;*.jpeg;*.bmp;*.png;';
if Form1.CheckBox2.Checked then
FindRes:=FindFirst(Dir+'*.*',faAnyFile,SR)
else
FindRes:=FindFirst(Dir+'*.*',faArchive,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 // anee iaeaai eaoaeia, oi
         begin
            FindIm(Dir+SR.Name+'\');
            FindRes:=FindNext(SR);
            Continue;
         end;
      if pos(lowercase(ExtractFileExt(SR.Name)),PicFl) > 0 then
      Form1.CheckListBox1.Items.Add(Dir+SR.Name);
      FindRes:=FindNext(SR);
   end;
   FindClose(SR);
end;
begin
findim({вводишь имя своей глобальной переменной});
end;





--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
volvo877
Дата 10.10.2006, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 14
Всего: 116



Sunvas, пост выше ты, я так понимаю, не соизволил заметить?
PM MAIL   Вверх
bems
Дата 10.10.2006, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Цитата(Yanis @  10.10.2006,  18:49 Найти цитируемый пост)
 Заведи глобальную переменную и перед вызовом FindImages присваивай ей значение такое же как и у параметра. 
А стек? smile 



--------------------
Обижено школьников: 8
PM MAIL   Вверх
Sunvas
Дата 11.10.2006, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(volvo877 @  10.10.2006,  21:12 Найти цитируемый пост)
Sunvas, пост выше ты, я так понимаю, не соизволил заметить?

Когда я писал свой пост - твоего еще не было. Посмотри на время... smile 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Yanis
Дата 11.10.2006, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(Sunvas @  10.10.2006,  21:32 Найти цитируемый пост)
Тогда толку от рекурсии??
Цитата(bems @  11.10.2006,  00:01 Найти цитируемый пост)
А стек?

Ну хорошо, хорошо. Признаю сглупил smile


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0552 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.