C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: диалоговое окно для выбора папок  (Прочитано 9203 раз)
Marvin
Участник


Сказали спасибо: +1/-0
Offline

Сообщений: 298


« : 30 Декабрь 2007, 02:49:42 »

привет всем!
вномание, вопрос: как создать диалоговое окно, типа как для выбора файлов, но только, что бы выбирать не файлы а папки??

заранее благодарю
Записан
Zor
Глобальный модератор


Сказали спасибо: +158/-30
Offline

Сообщений: 2946


« Ответ #1 : 30 Декабрь 2007, 05:15:13 »

функция WinApi SHBrowseForFolder()

Для начинающих: ищете и качаете книгу: Рейсдорф К., Хендерсон К. "Borland C++ Builder. Освой самостоятельно" (~50mb)
Через неделю-две будете летать.
Записан
Marvin
Участник


Сказали спасибо: +1/-0
Offline

Сообщений: 298


« Ответ #2 : 02 Январь 2008, 13:24:07 »

функция WinApi SHBrowseForFolder()

Для начинающих: ищете и качаете книгу: Рейсдорф К., Хендерсон К. "Borland C++ Builder. Освой самостоятельно" (~50mb)
Через неделю-две будете летать.


я же не visual c++ пишу, а как работать с API в борланде - незнаю, можно поподробнее.
PS. книгу скачать не могу - у меня инет диалаповый = 5кб/с
Записан
oxotnik
Глобальный модератор


Сказали спасибо: +100/-15
Offline

Сообщений: 2425


« Ответ #3 : 02 Январь 2008, 13:26:43 »

Код:
#include
...

AnsiString Directory;
SelectDirectory("Select directory",WideString(""),Directory);
ЗЫ:
Цитировать
книгу скачать не могу - у меня инет диалаповый = 5кб/с
тяжелое децтво - 8-ми битные игрушки
Записан
Marvin
Участник


Сказали спасибо: +1/-0
Offline

Сообщений: 298


« Ответ #4 : 02 Январь 2008, 15:14:54 »

Код:
#include
...

AnsiString Directory;
SelectDirectory("Select directory",WideString(""),Directory);

благодарю!
Записан
moskk
-Кто же это ходит за мёдом с воздушными шариками?
Участник


Сказали спасибо: +17/-4
Offline

Сообщений: 264

-Я хожу.


« Ответ #5 : 18 Июль 2008, 21:13:57 »

Код
AnsiString Directory;
SelectDirectory("Select directory",WideString(""),Directory);

а как сделать так же, только с кнопочкой "Создать папку"?
Записан
Zor
Глобальный модератор


Сказали спасибо: +158/-30
Offline

Сообщений: 2946


« Ответ #6 : 20 Июль 2008, 06:44:35 »

Только на WinApi. Ну или свой диалог сделать - сложность одинаковая.
Записан
Yurkins
Участник


Сказали спасибо: +36/-3
Offline

Сообщений: 368


« Ответ #7 : 23 Июль 2008, 19:00:20 »

Код
#define NO_WIN32_LEAN_AND_MEAN
// ...........................
#include "shlobj.h"
// ...........................
bool SelectDirectory(const AnsiString ACaption, const WideString ARoot, AnsiString &ADirectory)
{
 char *Buffer = new char[MAX_PATH];
 try
 {
   ITEMIDLIST *RootItemIDList = NULL;
   IShellFolder *IDesktopFolder;
   if (ARoot != WideString(""))
   {
     SHGetDesktopFolder(&IDesktopFolder);
     IDesktopFolder->ParseDisplayName(0, NULL,
       POleStr(ARoot), NULL, &RootItemIDList, NULL);
   }
 
   BROWSEINFO bi;
   bi.hwndOwner = 0;
   bi.pidlRoot = RootItemIDList;
   bi.lpszTitle = ACaption.c_str();
   bi.ulFlags = BIF_NEWDIALOGSTYLE|BIF_EDITBOX;
   bi.lpfn = NULL;
   bi.lParam = 0;
   bi.pszDisplayName = Buffer;
 
   LPITEMIDLIST pidlBrowse = SHBrowseForFolder(&bi);
   if (pidlBrowse != NULL)
   {
     if (SHGetPathFromIDList(pidlBrowse, Buffer))
       ADirectory = Buffer;
   }
 }
 __finally
 {
   delete [] Buffer;
   return DirectoryExists(ADirectory);
 }
}

и пример
Код
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString dir;
if (SelectDirectory("Select directory:", "", dir))
   Edit1->Text = dir;
}
 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.052 секунд. Запросов: 21.