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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2009, 17:05   #1
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию Диалог выбирающий не файл, а папку.

Нашёл только для файлов =\
TwiX вне форума Ответить с цитированием
Старый 03.11.2009, 17:10   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

SelectDirectory function
Поиском по форуму и в хелпах MSDN и Делфи все написано.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.11.2009, 17:18   #3
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

вам нужно SHGetSpecialFolderLocation, для вывода- SHBrowseForFolder
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 03.11.2009, 17:48   #4
Rabbit
Пользователь
 
Аватар для Rabbit
 
Регистрация: 12.01.2008
Сообщений: 12
По умолчанию

Может это поможет.
Код:
uses ShellAPI, ShlObj;
...
procedure TForm1.Button1Click(Sender: TObject);
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 := Form1.Handle;
  BrowseInfo.pszDisplayName := @DisplayName;
  TitleName := 'Заголовок окна';
  BrowseInfo.lpszTitle := PChar(TitleName);
  BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS;
  lpItemID := SHBrowseForFolder(BrowseInfo);
  if lpItemId <> nil then begin
    SHGetPathFromIDList(lpItemID, TempPath);
    ShowMessage(TempPath);
    GlobalFreePtr(lpItemID);
  end;
end;
Rabbit вне форума Ответить с цитированием
Старый 03.11.2009, 18:00   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Бросьте на форму ТShellTreeView и наслаждайтесь.
Вот простенький примерчик:
Код:
procedure TForm1.ShellTreeView1Change(Sender: TObject; Node: TTreeNode);
begin
Label1.Caption:=ShellTreeView1.Selected.Text;
end;
Лэйбл всегда будет вам показывать имя выбранной папки...
mihali4 вне форума Ответить с цитированием
Старый 03.11.2009, 19:54   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...полный код с настройками, лучше в виде функции:
Код:
// API диалог -----------------------------------------------------------------
function BrowseCallbackProc(hwnd: HWND; uMsg: UINT; lParam: LPARAM; lpData: LPARAM): Integer; stdcall;
begin
 if (uMsg = BFFM_INITIALIZED) then SendMessage(hwnd, BFFM_SETSELECTION, 1, lpData);
 BrowseCallbackProc:= 0
end;
function api_dir(h: hwnd; title: PChar; strFolder: string): String;
var lpItemID  : PItemIDList;
    path      : array[0..Max_path] of char; //выбранная папка
    BrowseInfo: TBrowseInfo;                //настройки диалога
begin
 FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
 SHGetSpecialFolderLocation(h,csidl_desktop,BrowseInfo.pidlRoot);
 //устанавливаем свойства диалогового окна
 with BrowseInfo do begin
  hwndOwner:= h;     //окно-владелец
  lpszTitle:= title; //заголовок диалога
  //не показываем некоторые системные папки: "Корзина", "Панель управления" и т.д
  ulFlags  := BIF_RETURNONLYFSDIRS+BIF_EDITBOX+BIF_STATUSTEXT;
  lpfn:= @BrowseCallbackProc;
  lParam:= LongInt(PChar(strFolder))
 end;

 //выводим диалог
 lpItemID  := SHBrowseForFolder(BrowseInfo);
 //папка, указанная юзером, существует?
 if lpItemId <> nil then begin
  SHGetPathFromIDList(lpItemID, Path);
  result   := path;
  GlobalFreePtr(lpItemID) //освобождаем ресурсы
 end
end;

...
//вызов
t:= api_dir(handle,'Укажите каталог архивов: *.CU'#10+'для визуализации',fpath_CU);
if t<>'' then fpath_CU:= t;
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 03.11.2009, 20:35   #7
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Вот простой примерчик
Код:
SelectDirectory ('Выберите папку', 'D:\, C:\', dir, [sdNewFolder, sdNewUI])
где
var
dir : string;
FaTaL вне форума Ответить с цитированием
Старый 03.11.2009, 21:02   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

ну тогда уж
Код:
SelectDirectory('Выберите папку', 'D:\, C:\', dir)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 03.11.2009, 21:19   #9
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,472
По умолчанию

Вот специально для вас упростил функцию:

Код:
uses FileCtrl;

...
function SelectDir(Title, DefDrive: string): string;
begin
 if SelectDirectory(Title, DefDrive, Result) then Exit;
end;

Использование:
procedure TForm1.Button1Click(Sender: TObject);
begin
Caption:= SelectDir('Chose Folder','C:\');
end;
SelectDir('Текст','папка по умолчанию');
uberchel на форуме Ответить с цитированием
Старый 04.11.2009, 13:45   #10
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Брр... Ответ был дан в первом же посте =\
TwiX вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать ярлык => выбор файла => Открыть файл как папку??? Alex Cones Windows 6 05.10.2009 10:47
Как запаковать папку/файл в zip из консоли? Viteef Операционные системы общие вопросы 2 28.05.2009 23:45
Переименовать папку и файл valerij Microsoft Office Excel 32 13.11.2008 02:47
Как сохранить файл заранее указывая папку? highklass Общие вопросы Delphi 2 09.06.2008 10:58
Диалог Михаил Юрьевич Общие вопросы Delphi 2 26.04.2008 22:35