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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2007, 13:05   #1
UnD)eaD)Snake
Форумчанин Подтвердите свой е-майл
 
Аватар для UnD)eaD)Snake
 
Регистрация: 07.07.2007
Сообщений: 241
Вопрос Выбор папки

Какие настройки нужно применить к opendialog, чтобы выбирался не файл, а папка?
UnD)eaD)Snake вне форума Ответить с цитированием
Старый 20.08.2007, 13:17   #2
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

никакие, используй другие компоненты
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 20.08.2007, 18:30   #3
Kashp
Форумчанин
 
Регистрация: 05.08.2007
Сообщений: 225
По умолчанию

Вот пример
Код:
uses FileCtrl
...
procedure TForm1.FormCreate(Sender: TObject);
var 
s:string;
begin
SelectDirectory('Выбери папку','d:\ , c:\',s); 
// s хранит в себе путь
Kashp вне форума Ответить с цитированием
Старый 21.08.2007, 22:29   #4
Tocha@
Новичок
Джуниор
 
Регистрация: 21.08.2007
Сообщений: 1
По умолчанию ))

Можно так - в фильтр ввести *\*.* - он будет отображать только папки, а потом определять при изменении текущей папки проверять её на подходящесть )) и закрывать Opendialog при нужде.
Tocha@ вне форума Ответить с цитированием
Старый 22.08.2007, 10:04   #5
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Я бы вместо SelectDirectory использовал SHBrowseForFolder.
still_alive вне форума Ответить с цитированием
Старый 22.08.2007, 11:18   #6
pinhead
Пользователь
 
Аватар для pinhead
 
Регистрация: 08.12.2006
Сообщений: 36
По умолчанию

Вот пример использования SHBrowseForFolder:
Код:
var
   lpItemID: PItemIDList;
   TempPath, DisplayName: array[0..MAX_PATH] of char;
   TitleName: string;
   BrowseInfo: TBrowseInfo;
begin
   FillChar(TempPath, sizeof(TempPath), #0);
   with BrowseInfo do
   begin
      hwndOwner := Handle;
      pszDisplayName := @DisplayName;
      TitleName := 'Выберите папку';
      lpszTitle := PChar(TitleName);
      ulFlags := BIF_RETURNONLYFSDIRS
   end;
   lpItemID := SHBrowseForFolder(BrowseInfo);
   if lpItemId <> nil then
   begin
      SHGetPathFromIDList(lpItemID, TempPath);
      GlobalFreePtr(lpItemID)
   end
   else
     exit;
end;
В итоге в переменной TempPath будет находиться путь к выбранной папке!
Знание этого – Мудрость.
Умение этим пользоваться – Искусство.
pinhead вне форума Ответить с цитированием
Старый 22.08.2007, 11:47   #7
UnD)eaD)Snake
Форумчанин Подтвердите свой е-майл
 
Аватар для UnD)eaD)Snake
 
Регистрация: 07.07.2007
Сообщений: 241
По умолчанию

pinhead что в uses надо?
UnD)eaD)Snake вне форума Ответить с цитированием
Старый 22.08.2007, 11:51   #8
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

ShellAPI, ShlObj
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 22.08.2007, 11:56   #9
UnD)eaD)Snake
Форумчанин Подтвердите свой е-майл
 
Аватар для UnD)eaD)Snake
 
Регистрация: 07.07.2007
Сообщений: 241
По умолчанию

добавил в uses shlobj;

потом на buttonclick написал:

Код:
var
   lpItemID: PItemIDList;
   TempPath, DisplayName: array[0..MAX_PATH] of char;
   TitleName: string;
   BrowseInfo: TBrowseInfo;
begin
   FillChar(TempPath, sizeof(TempPath), #0);
   with BrowseInfo do
   begin
      hwndOwner := Handle;
      pszDisplayName := @DisplayName;
      TitleName := 'Выберите папку';
      lpszTitle := PChar(TitleName);
      ulFlags := BIF_RETURNONLYFSDIRS
   end;
   lpItemID := SHBrowseForFolder(BrowseInfo);
   if lpItemId <> nil then
   begin
      SHGetPathFromIDList(lpItemID, TempPath);
      GlobalFreePtr(lpItemID)
   end
   else
     exit;
end;
Врубаю, мне пишет Access volation in adress.....

и указывает на строку

lpItemID := SHBrowseForFolder(BrowseInfo);
UnD)eaD)Snake вне форума Ответить с цитированием
Старый 22.08.2007, 12:02   #10
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

var
TitleName: string;
lpItemID: PItemIDList;
BrowseInfo: TBrowseInfo;
DisplayName: array[0..MAX_PATH] of char;
TempPath: array[0..MAX_PATH] of char;
begin
FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
BrowseInfo.hwndOwner := <твоя форма>.Handle;
BrowseInfo.pszDisplayName := @DisplayName;
TitleName := 'Please specify a directory';
BrowseInfo.lpszTitle := PChar(TitleName);
BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS;
lpItemID := SHBrowseForFolder(BrowseInfo);
if lpItemId <> nil then
begin
SHGetPathFromIDList(lpItemID, TempPath);
ShowMessage(TempPath);
GlobalFreePtr(lpItemID);
end;
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск папки WOLFak Общие вопросы Delphi 9 21.01.2008 14:49
Случайный выбор с папки Marsik Помощь студентам 2 15.12.2007 19:04
Папки xTANATOSx Общие вопросы Delphi 1 05.11.2007 16:26
ЗАДНИЙ ФОН ПАПКИ В XP BanDit Свободное общение 3 16.06.2007 21:37
Отслеживает появление в папке файлов. слежение за определенным файлом в определенной папке. RammFan Win Api 1 09.06.2007 11:09