Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2014, 19:18   #1
DarkHacker
Форумчанин
 
Аватар для DarkHacker
 
Регистрация: 12.04.2008
Сообщений: 105
По умолчанию Возврат рекурсивной функции

Здарвствуйте. Помогите найти ошибку в коде. Есть функция которая должна в результате своего выполнения выдать результат функции описаной ниже. Первая функция разбивает bitmap, вторая рекурсивно сравнивает bitmap с файлами в папке. В результате 1 должна получит имя файла с которым совпала bitmap.
Код:
function check_patterns(bmp:TBitmap;Path:string):string;
var
bmp2:TBitmap;
sRec: TSearchRec;
isFound: boolean;
str:string;
begin
str:='';
isFound := FindFirst( Path + '\*.*', faAnyFile, sRec ) = 0;
while isFound do
begin
if ( sRec.Name <> '.' ) and ( sRec.Name <> '..' ) then
begin

if ( sRec.Attr and faDirectory ) = faDirectory then
check_patterns(bmp,Path + '\' + sRec.Name);
end;

if (sRec.Attr=32) then
begin
bmp2:=TBitmap.create();
bmp2.LoadFromFile(Path + '\' + sRec.Name);

         if(bitmap_diff2(bmp,bmp2)>95) then
            begin
            //application.MessageBox(PAnsiChar(ExtractOnlyFileName(sRec.Name)),0,0);
            str:=ExtractOnlyFileName(sRec.Name);
            application.MessageBox(PAnsiChar(str),0,0);
            bmp2.free;

 Result:=str;
            break;
            end;


end;
Application.ProcessMessages;
isFound := FindNext( sRec ) = 0;
end;
FindClose( sRec );
Result:=str;
end;
В коде есть лишние Result - не убрал просто чтобы видели что я уже делал. Не пойму где ошибся. Подскажите пожалуйста.
С помощью вывода месседж бокс удостоверяюсь что функция сравнения свое отработала правильно - так оно и есть, а вот на выходе все равно пустая строка.
DarkHacker вне форума Ответить с цитированием
Старый 30.11.2014, 19:22   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Код:
if ( sRec.Attr and faDirectory ) = faDirectory then begin
 Result:=check_patterns(bmp,Path + '\' + sRec.Name);
 if Result<>'' then break;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.11.2014, 19:38   #3
DarkHacker
Форумчанин
 
Аватар для DarkHacker
 
Регистрация: 12.04.2008
Сообщений: 105
По умолчанию

Убрал из своего кода в конце присвоение результата и все отлично заработало, спасибо вам большое!
DarkHacker вне форума Ответить с цитированием
Старый 30.11.2014, 20:27   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Пожалуйста. Будь внимательнее впредь )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить значение рекурсивной функции Ann2807 Помощь студентам 2 27.05.2013 17:09
[C++]: разработка рекурсивной функции, возвращающей значения erfo Помощь студентам 1 22.05.2012 07:31
C#,Описание рекурсивной функции RootK Moncorel Помощь студентам 7 23.12.2011 00:41
Визуализация работы рекурсивной функции Diablero Общие вопросы Delphi 1 25.05.2011 11:23
Составление программ с использованием рекурсивной функции S@muel Общие вопросы C/C++ 0 06.04.2009 22:27