Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Список каталогов [D6, D7, Win2k, WinXP]


Страницы:   1 2

RainKMM ©   (2006-09-28 13:43:00) 

Здравствуйте!
Подскажите пожалуйста, как получить список всех подкаталогов в каталоге?


RASkov   (2006-09-29 23:38:00) [1]

блин, ... процед урке... :)
сначало постим потом читаем
семь раз прочти, а потом запость © Новая пословица
зато так прикольно получается... если наоборот.


RASkov   (2006-09-29 23:34:00) [2]

> [32] Elen ©   (29.09.06 07:54)

И в самом деле...
>....
Тады можно и так вопрос решить - АПИ и строк меньше.
с учетом заполнения подкаталогов в ListBox

procedure GetSubDirs(const Path: String; LB: TListBox);
begin
LB.Clear;
SendMessage(LB.Handle, LB_DIR, DDL_DIRECTORY or DDL_EXCLUSIVE, LParam(PChar(Path+'\*')));
end;

procedure TForm1.Button1Click(...);
begn
 GetSubDirs('C:\Windows', ListBox1);
end;


Не пробовал, поверил на слово:) мож чё Path в процедырке подправить надо будет...
ЗЫ Ну не у всех конэчна вында на Ц стаит в папке "окна"


Elen   (2006-09-29 07:54:00) [3]


> И вопрос задам, если можно, кто из предков ComboBox ловит
> сообщение CB_DIR
> SendMessage(ComboBox1.Handle, CB_DIR, DDL_DIRECTORY, LParam(PChar('C:
> \*'))); - сюда даходят
>
> SendMessage(ListBox1.Handle, CB_DIR, DDL_DIRECTORY, LParam(PChar('C:
> \*'))); - а сюда нет

А сюда кажись надо LB_DIR (ListBox_Dir)


Elen   (2006-09-29 07:52:00) [4]


> А почему Вы считаете, что обратный слеш должен быть предпоследним
> символом?

Упс... Конечно же последним :-)


Elen   (2006-09-29 07:50:00) [5]


> MsGuns

Все это верно сказано, пожелайте мне удачи не наступать на такие грабли как было у Вас, Господа!. Я использую компоненты в программах, не для продажи, а для внутренних целей предприятия. Слава богу этого пока хватает и не было еще особых проблем с перестройкой и модернизацией моих программ, т.к. на делфи у нас програмлю только я. У меня действительно ло " маленький опыт групповой разработки проектов и тем более руководства такой группой",


> представим, что sRootDir равна ''.

Тогда надо добавить проверку на пусто


> Anatoly Podgoretsky ©   (28.09.06 20:06) [26]
>
>
> >  LMD - это всего-навсего набор красивых побрякушек, большинство
>
> > из которых не представляют из себя никакой практической
>
> > ценности
>
> Так для кого написан

Написан как раз для одиночных разработок - такими как раз я и занимаюсь, поэтому мне удобнее так.
Господа я уважаю Ваш огромный опыт и, поверте, нисколько с ним не спорю - я лиш предлагаю возможные варианты от простого к сложному. Не думаю что новичкам с подобными вопросами нужно отбрасывать такую возможность как компоненты, в начале разработки они помагают как мне кажется определить цель работы и желаемый результат достыточно быстро и при этом естесственно при последующем апгрейде программы как можно белюше заменить стороннего на свое.

По этому поводу Всем мой глубокий Respect!!!


ASoft   (2006-09-29 06:24:00) [6]


> MsGuns ©   (28.09.06 17:23) [22]

отчасти, согласен, так как, однажды, наступил на собственные грабли:
пришлось модернизировать свою прогу на девственно-чистом Delphi, где небыло никаких сторонних компонентов. Пришлось убить всякие LMD (которые я когда-то на радостях от приобретения впихнул в программу) из кода и писать все, чуть ли не с нуля :-)
<сорри, если офтоп>


RASkov   (2006-09-29 00:06:00) [7]

Хоть и автор нашол решение его вопроса, всеже кину на всякий случай кусок кода вырезанный из filectrl.pas (помоему правильно написал) идущий вместе с дельфёй

function SlashSep(const Path, S: String): String;
begin
 if AnsiLastChar(Path)^ <> '\' then
   Result := Path + '\' + S
 else
   Result := Path + S;
end;

function ReadDirectoryNames(const ParentDirectory: string;
 DirectoryList: TStrings): Integer;
var
 Status: Integer;
 SearchRec: TSearchRec;
begin
 Result := 0;
 Status := FindFirst(SlashSep(ParentDirectory, '*.*'), faDirectory, SearchRec);
 try
   while Status = 0 do
   begin
     if (SearchRec.Attr and faDirectory = faDirectory) then
     begin
       if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
       begin
         DirectoryList.Add(SearchRec.Name);
         Inc(Result);
       end;
     end;
     Status := FindNext(SearchRec);
   end;
 finally
   FindClose(SearchRec);
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Caption:=IntToStr(ReadDirectoryNames('C:\Temp\', ListBox1.Items));
end;


И вопрос задам, если можно, кто из предков ComboBox ловит сообщение CB_DIR
SendMessage(ComboBox1.Handle, CB_DIR, DDL_DIRECTORY, LParam(PChar('C:\*'))); - сюда даходят

SendMessage(ListBox1.Handle, CB_DIR, DDL_DIRECTORY, LParam(PChar('C:\*'))); - а сюда нет


Anatoly Podgoretsky   (2006-09-28 20:10:00) [8]

RainKMM   (28.09.06 18:29) [25]
Сходи ко мне на сайт и возьми ФИДО FAQ в HTML формате, там подробно описано с нюансами.


Anatoly Podgoretsky   (2006-09-28 20:06:00) [9]


>  LMD - это всего-навсего набор красивых побрякушек, большинство
> из которых не представляют из себя никакой практической
> ценности

Так для кого написан


RainKMM   (2006-09-28 18:29:00) [10]

все ребята всем спасибо, все получилось


Ketmar   (2006-09-28 17:45:00) [11]

>[11] Elen(c) 28-Sep-2006, 15:49
>Тогда добавь от себя
> if sRootDir[length(sRootDir)-1]<>'\'
>then sRootDir:=sRootDir+'\';
хихик. представим, что sRootDir равна ''.


Плохиш   (2006-09-28 17:38:00) [12]


> Elen ©   (28.09.06 15:49) [11]
> Если не ошибаюсь AddDirSeparator добавляет взад директории
> "\".
> Тогда добавь от себя
> if sRootDir[length(sRootDir)-1]<>'\'

А почему Вы считаете, что обратный слеш должен быть предпоследним символом?


MsGuns   (2006-09-28 17:23:00) [13]

>Elen ©   (28.09.06 15:35) [5]
>У меня никогда не было тарблов со сторонними компонентами.

У Вас, очевидно, очень маленький опыт групповой разработки проектов и тем более руководства такой группой.

>Как правило все мои проги содержат чего-то из инета и ни разу не глюкнули на других тачках (если конечно я их четко отлаживаю).

Я бы никогда не купил у Вас программу. Просто интересно, кто у Вас были учителя ?

>Сторонние компоненты - это возможность избавить программистов от рутины. Разве не так?

Нет, причем абсолютно. Бензопилу придумали не для того, чтобы избавиться от лобзика, а чтобы столяр-краснодеревщик не пилил деревья "Дружбой".
Вы тягаете компоненты из Сети только потому, что они Вам ничего не стОят. Если бы Вам пришлось заплатить свои кровные баксов по 10-15 (и это еще сущая ерунда) за каждый прибамбасенный LMDEdit и LMDLabel, я уверен, что кол-во заимствованных компонент в Ваших проектах резко снизилось.
Есть смысл приобретать сторонние компоненты в трех случаях:
1. Имеется экономическая целесообразность. Другими словами, время, сэкономленное на программировании и отладке (особенно) "велосипедов" (хотя в большинстве случаев использования сторонних компонент я считаю этот термин не совсем верным), сопоставимо с их стоимостью.
2. Ваш проект носит "разовый" характер, не подлежит длительному сопровождению другими людьми и даже фирмами. Т.е. действует принцип "Сделал"-"продал"-"забыл".
3. Руководимый Вами коллектив разработчиков будет работать эффективнее если Вы приобрететеподдерживаемую  библиотеку компонент.

Из своего сегодняшнего опыта. На заводе, где сейчас обитаю, года 2 назад работал один молодой человек, подобно Вам любитель шаровых, но "красивых" компонент. Сегодня по его программам возникают вопросы (это естественно - время не стоит на месте) и НИ ОДНОГО ПРОЕКТА я не смог скомпиллировать ни под 6, ни под 7 делфей. А все потому, что то одна библиотека (а их там около 10 штук, включая Rx,Eh,LMD,какой-то Eagle и черт еще какие), то другая не хотят "дружить" с версией делфи позднее 5.0

Сколько с ними мороки - можно представить.


RainKMM   (2006-09-28 16:47:00) [14]

хорошо, учту при тесте


Elen   (2006-09-28 16:43:00) [15]


> Я понял в чем прикол. папка в которой ми ищем должна бить
> корневой

НЕТ! У меня ищет там где я скажу. Побоку ему вложенность. Иши ошибку дальше


RainKMM   (2006-09-28 16:37:00) [16]

Я понял в чем прикол. папка в которой ми ищем должна бить корневой, а не подпапкой в которой есть папки. и ето скажу я вам очень плохо.


Elen   (2006-09-28 16:35:00) [17]


> RainKMM

Странно у меня все работает. :-\ Точно путь правильный?


RainKMM   (2006-09-28 16:29:00) [18]

sSearchPath = с:\test\


Elen   (2006-09-28 16:24:00) [19]


> RainKMM

Поставь бряк и проверь чему sSearchPath равна


RainKMM   (2006-09-28 16:15:00) [20]

не чето тут явно не чисто. процедуру визиваю:
GetSubDirs('с:\test'; listbox1.items);
программа заходит в процедуру
if FindFirst(sSearchPath + '*', faDirectory, srSearch) = 0 then на етой строке, а потом переходит на обработку FindClose(srSearch); хотя в исходной папке имеются вложение папки.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо