Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Delphi] Перечисление всех bmp-файлов папки


Автор: svarogik 3.10.2006, 19:07
можно ли проверить ТУ ПАПКУ где находится екзешник программы на наличие *.bmp и потом загрузить их все в имэйдж лист,а названия файлов в массив стрингов? другой вопрос как это сделать но пока только можно ли...

Автор: Albinos_x 3.10.2006, 19:17
можно... как осуществлять посик ффайлов не раз обсуждалось, пользуемся поиском или смотрим в DRKB (Delphi Russian Knowledge Base) или в FAQ

Автор: Marriage 3.10.2006, 19:17
Можно.
Application.ExeName - путь к фале ЕХЕ, проверить папку, и если есть, тогда методом ADD добавить.

Автор: Romikgy 3.10.2006, 20:24
http://forum.vingrad.ru/index.php?showtopic=112117&unread=1&hl=findfile

Автор: svarogik 4.10.2006, 22:00
вот пытаюсь разобраться, 
Код


 Procedure FindFile(Dir:string, FileMask: string); 
var SearchRec:TSearchRec; 
begin 
 if Dir<>'' then if Dir[length(Dir)]<>'\' then Dir:=Dir+'\';  
 if FindFirst(Dir+FileMask, faAnyFile, SearchRec)=0 then repeat  
   if (SearchRec.name='.') or (SearchRec.name='..') then continue;  
   if (SearchRec.Attr and faDirectory)<>0 then  
     ScanDir(Dir+SearchRec.name) 
   else  
     Делай_с_найденным_файлом _фсё_что_хочеш(Dir+SearchRec.name); 
 until FindNext(SearchRec)<>0;  
 FindClose(SearchRec);
end; 

FindFile('c:\','*.mp3');

 


что такое
Код

if FindFirst(Dir+FileMask, faAnyFile, SearchRec)=0 then repeat  
   if (SearchRec.name='.') or (SearchRec.name='..') then continue;  
   if (SearchRec.Attr and faDirectory)<>0 then  
     ScanDir(Dir+SearchRec.name) 



Добавлено @ 22:02 
с помощью этой процедуры несколько файлов найти можно будет?

Автор: Romikgy 4.10.2006, 22:40
здесь находятся все файлы по маске!
как те надо получить список файлов , в каком виде?

Автор: Albinos_x 4.10.2006, 22:41
Цитата(svarogik @  4.10.2006,  22:00 Найти цитируемый пост)
с помощью этой процедуры несколько файлов найти можно будет

угу...

Автор: svarogik 5.10.2006, 07:36
ну тоесть я должен просканировать папку, где екхзешник, потом картинки запихнуть в имэйж лист, а их названия в массив, потом построить drawgrid по этим картинкам, с подписанными названиями,
я понял что это поиск файлов, но там непонятные процедуры, которые я выделил

Автор: Akella 5.10.2006, 08:20
Код

var
  Im1: TBitmap; 
...

Im1 := TBitmap.Create; 


else  //по мере поиска добаваляем имена файлов в StringList
     if AnsiUpperCase(ExtractFileExt(SearchRec.name)) = '.BMP' then begin
       StringList1.Add(Dir+SearchRec.name); //полный путь и имя файла
       Im1.LoadFromFile(Dir+SearchRec.name);
       ImageList1.GetBitmap(0,Im1);
      или попробуй ещё несколько примеров
     //ImageList1.FileLoad(rtBitmap, Dir+SearchRec.name, clFuchsia);
    //ImageList1.FileLoad(rtBitmap, Dir+SearchRec.name, clBtnFace);
    //ImageList1.GetResource(rtIcon,PAnsiChar('Dir+SearchRec.name'),24,[lrTransparent],clAqua);
    //ImageList1.GetResource(rtBitmap,'d:\myres.bmp',24,[lrFromFile,lrTransparent],clAqua); 
или
     StringList1.Add(SearchRec.name); //только имя файла
     
     end;//if

Автор: svarogik 5.10.2006, 09:31
а в имэйж лист точно добавляется? там же вроде метод адд а тут его нет или fileload и getresource как раз добавляет? что такое ImageList1.GetBitmap(0,Im1);?
. И еще если можно расскажите как работает процедура поиска,  построчно, не только последний пункт, а то что я раньше добавил

Добавлено @ 09:34 
Код

Procedure FindFile(Dir:string, FileMask: string); 
var SearchRec:TSearchRec; Im1: TBitmap; 
begin 

Im1 := TBitmap.Create;  

if Dir<>'' then if Dir[length(Dir)]<>'\' then Dir:=Dir+'\';  
 if FindFirst(Dir+FileMask, faAnyFile, SearchRec)=0 then repeat  
   if (SearchRec.name='.') or (SearchRec.name='..') then continue;  
   if (SearchRec.Attr and faDirectory)<>0 then  
     ScanDir(Dir+SearchRec.name) 
   else  
     if AnsiUpperCase(ExtractFileExt(SearchRec.name)) = '.BMP' then begin
       StringList1.Add(Dir+SearchRec.name); //полный путь и имя файла
       Im1.LoadFromFile(Dir+SearchRec.name);
       ImageList1.GetBitmap(0,Im1);
           StringList1.Add(SearchRec.name);
     
     end;//if
 
 until FindNext(SearchRec)<>0;  
 FindClose(SearchRec);
end; 


а нет заметил, тоесть примерно так?

Добавлено @ 09:35 
а вообще маска это расширение?

Добавлено @ 09:36 
куча новых процедур ничерта не понятно

Автор: Romikgy 5.10.2006, 09:42
Бросаешь листбокс
Код

SendMessage(ListBox1.Handle,LB_DIR,DDL_READWRITE,LongInt(PChar('*.bmp')));

в лист боксе список бмп-шек в твоей рабочей папке
далее показывать как имагелист их пихать?

Автор: svarogik 5.10.2006, 10:11
ага, только я эту процедурку прописываю, а он мне матерится что scandir это ундекларайтед идентифир

Автор: Romikgy 5.10.2006, 10:14
код в студию!
Цитата(Romikgy @  5.10.2006,  08:42 Найти цитируемый пост)
SendMessage(ListBox1.Handle,LB_DIR,DDL_READWRITE,LongInt(PChar('*.bmp')));

это заменяет
Цитата(svarogik @  5.10.2006,  08:31 Найти цитируемый пост)
Procedure FindFile(Dir:string, FileMask: string); 
var SearchRec:TSearchRec; Im1: TBitmap; 
begin 
Im1 := TBitmap.Create;  
if Dir<>'' then if Dir[length(Dir)]<>'\' then Dir:=Dir+'\';  
 if FindFirst(Dir+FileMask, faAnyFile, SearchRec)=0 then repeat  
   if (SearchRec.name='.') or (SearchRec.name='..') then continue;  
   if (SearchRec.Attr and faDirectory)<>0 then  
     ScanDir(Dir+SearchRec.name) 
   else  
     if AnsiUpperCase(ExtractFileExt(SearchRec.name)) = '.BMP' then begin
       StringList1.Add(Dir+SearchRec.name); //полный путь и имя файла

это 

Автор: svarogik 5.10.2006, 10:37
кот в студии, 4 сообщения вверх, тоесть как заменяет? что это делает
 SendMessage(ListBox1.Handle,LB_DIR,DDL_READWRITE,LongInt(PChar('*.bmp'))); 



Автор: Romikgy 5.10.2006, 10:48
Цитата(svarogik @  5.10.2006,  09:37 Найти цитируемый пост)
 SendMessage(ListBox1.Handle,LB_DIR,DDL_READWRITE,LongInt(PChar('*.bmp'))); 

это саганяет список файлов имеющих расширение bmp в листбокс
PS имхо попробовал бы вопросов не возникло бы!

Автор: svarogik 5.10.2006, 11:33
а этот лист бокс создавать как то надо?

Автор: Romikgy 5.10.2006, 11:34
Цитата(svarogik @  5.10.2006,  10:33 Найти цитируемый пост)
а этот лист бокс создавать как то надо?

кинь на форму или создай динамически

Автор: svarogik 5.10.2006, 11:35
я ввожу это в процедуру мне говорят лист бокс1 ундекларэйтед

Добавлено @ 11:37 
нет я уже создал, все равно говорит, кинул, как ты говоришь, на форму

Автор: Romikgy 5.10.2006, 11:38
Цитата(svarogik @  5.10.2006,  10:35 Найти цитируемый пост)
ундекларэйтед


Цитата(Romikgy @  5.10.2006,  10:34 Найти цитируемый пост)
кинь на форму или создай динамически

 smile 
Цитата(Romikgy @  5.10.2006,  09:14 Найти цитируемый пост)
код в студию!

 smile 

Автор: svarogik 5.10.2006, 11:39
а , понял, там надо было не просто листбокс, а форм.листбокс, теперь ругается что такое длл рид врайт

Автор: Romikgy 5.10.2006, 11:40
Цитата(Romikgy @  5.10.2006,  09:48 Найти цитируемый пост)
ListBox1.Handle

замени на 
Код

Form1.ListBox1.Handle

Автор: svarogik 5.10.2006, 11:41
код целиком не дам там много, просто я в конце проги создал процедуру findfile бегин, и вписал то что посоветовал

Добавлено @ 11:42 
не, вопрос уже не в этом, теперь говорит че такое dll_readwrite тоже undeclared

Добавлено @ 11:43 
а вообще что такое lb_dir  и в целом что процедура делает? а то попробовать я могу, но мне непонятно что делает

Автор: Romikgy 5.10.2006, 11:43
DDL_READWRITE = 0;
в модуле windows

Добавлено @ 11:44 
Цитата(svarogik @  5.10.2006,  10:41 Найти цитируемый пост)
dll_readwrite


Цитата(Romikgy @  5.10.2006,  10:43 Найти цитируемый пост)
DDL_READWRITE

сравни!!!!

Автор: svarogik 5.10.2006, 11:45
чего?

Добавлено @ 11:45 
огромная разница, имеет значение?

Автор: Romikgy 5.10.2006, 11:46
Цитата(svarogik @  5.10.2006,  10:41 Найти цитируемый пост)
 такое lb_dir

мессага листбокса виндового, просит список файлов из директории

Автор: svarogik 5.10.2006, 11:46
фу ты блин)) заметил

Автор: Romikgy 5.10.2006, 11:47
Цитата(svarogik @  5.10.2006,  10:45 Найти цитируемый пост)
огромная разница, имеет значение?

конечно имеет значение , в буквах разница! 2 букве

Добавлено @ 11:48 
Цитата(svarogik @ 5.10.2006,  10:46)
фу ты блин)) заметил

это хорошо

Автор: svarogik 5.10.2006, 11:52
зашибись, теперь в листбоксе куча файлов пишется, их оттуда выдернуть можно?,
кстати почему ты посоветовал воспользоваться этой процедурой вместо поиска файлов? и почему бы ей всегда не пользоваться?

Добавлено @ 11:54 
я хочу типа цикл, с индексом, пока не закончится листбокс, строку считывать, в имэйжлист добавить тот файл который считал, из лист бокса построчно информацию дергать можно?

Добавлено @ 11:58 
хотя нет, дергать строки я умею, пока сам попробую, спасибо

Добавлено @ 12:02 
а есть переменная в которой хранится размер лист бокса? я хочу сделать цикл for i := 1 to ({количество строк листбокса}-1)

Автор: Romikgy 5.10.2006, 12:03
Код

for i:=0 to ListBox1.Count-1 do
sx:=ListBox1.Items[i]; // копирование из лист бокса в строку цикл по всем итемам листбокса


Добавлено @ 12:04 
Цитата(svarogik @  5.10.2006,  10:52 Найти цитируемый пост)
зашибись, теперь в листбоксе куча файлов пишется, их оттуда выдернуть можно?,
кстати почему ты посоветовал воспользоваться этой процедурой вместо поиска файлов? и почему бы ей всегда не пользоваться?

имхо проще юзать , это оболочка виндовая над findfirst/findnext

Автор: svarogik 5.10.2006, 12:12
а ограничения?

Добавлено @ 12:14 
вот я пройдусь по списку, а в imagelist как файлы загнать?

Добавлено @ 12:16 
и еще если у меня размер imagelist 40Х40 а картинка к примеру 80Х80 то он подгружаемый рисунок сожмет  до 40Х40 или раздробит на 4 и по очереди запихает в imagelist?

Автор: Romikgy 5.10.2006, 12:35
Цитата(svarogik @  5.10.2006,  11:12 Найти цитируемый пост)
а ограничения?

в ссмысле?
Цитата(svarogik @  5.10.2006,  11:12 Найти цитируемый пост)
вот я пройдусь по списку, а в imagelist как файлы загнать?

Код

Im1: TBitmap; 
begin 
Im1 := TBitmap.Create;  
Im1.LoadFromFile(ListBox1.Items[i]);
       ImageList1.GetBitmap(0,Im1);

так не работает?
Цитата(svarogik @  5.10.2006,  11:12 Найти цитируемый пост)
и еще если у меня размер imagelist 40Х40 а картинка к примеру 80Х80 то он подгружаемый рисунок сожмет  до 40Х40 или раздробит на 4 и по очереди запихает в imagelist? 

имхо дробить не будет 100% , а вообще практика лучшее средство , так что пробуй

Автор: svarogik 5.10.2006, 12:50
Код

for i := 1 to listbox1.count-1 do
begin
Im1.LoadFromFile(ListBox1.Items[i]);
       ImageList4.GetBitmap(i,Im1);
end;
imagelist4.draw({канва},10,10,1);


 
не рисует, хотя по идее рисунков в имэйжлисте должно быть 6

Автор: Romikgy 5.10.2006, 14:59
А для какой цели те имаге лист?
все картинки у тя одного размера?

Добавлено @ 14:59 
Цитата(Romikgy @  5.10.2006,  11:35 Найти цитируемый пост)
ImageList1.GetBitmap(0,Im1);

вместо этого надо 
Код

ImageList1.Add(Im1,nil);

Автор: svarogik 6.10.2006, 16:29
а нил зачем? картинки последовательно добавятся?

Автор: Romikgy 6.10.2006, 16:53
Цитата(svarogik @  6.10.2006,  15:29 Найти цитируемый пост)
а нил зачем? картинки последовательно добавятся? 

этот метод ожидает саму картинку , первый битмап, и его маску, второй битмап!
ЗЫ не брезгуем смотреть хелп!

Автор: svarogik 7.10.2006, 13:38
брээзгуем, там все на английзком

Автор: Romikgy 7.10.2006, 14:36
Цитата(svarogik @  7.10.2006,  12:38 Найти цитируемый пост)
брээзгуем, там все на английзком 

учи там много умного!!!

Автор: svarogik 7.10.2006, 16:03
только зачем то половина справки в делфи это синтаксис С++

Добавлено @ 16:07 
в имагелист добавляется только , по чему то картинки, размер которых отличается от заданного в листе, не прорисовываются

Добавлено @ 16:07 
мне это конечно не нужно,только просто непонятно

Добавлено @ 16:09 
хотя нет, нужно, мне надо будет картинки прорисовывать разного размера в зависимости от условий, либо 10Х10 либо40Х40, и причем не обрезать выделяя первые 10 пикселей, а сжимать размер, с потерей качества

Добавлено @ 16:13 
ты говорил что картинки дробится не будут, а они раздробились, и покусочно запихались в имэйж лист, и теперь на месте первой картинки, обрезок первой, а на месте второй, другой обрезок первой картинки

Автор: Romikgy 7.10.2006, 18:59
Цитата(Romikgy @  5.10.2006,  11:35 Найти цитируемый пост)
имхо дробить не будет

имхо впереди видел?

Ты лучше скажи зачем тебе имаге лист?

Автор: svarogik 16.10.2006, 16:59
имхо это конечно сила, мне лист для того что-бы по хорошемупрорисовывать потом, у меня карта, это массив где каждое поле запись, и у меня по номерам ,допустим если карта[10,10]= 4тогда прорисовываю травку вэтом месте, из имэйжлиста

Автор: svarogik 16.10.2006, 17:20
да, и можно ли с помошью tfilestream создать файл в той папке где сама программа, не зависимто от дерева каталогов, и заодно проверить существует ли такой файл, fmcreate не устраивает потому что открывает, или создает файл в режим записи, а мне бы хотеось в режиме чтения

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)