Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/35: Рейтинг темы: голосов - 35, средняя оценка - 4.97
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3

SelectDirectory в RAD Studio XE4

21.09.2014, 15:41. Показов 7331. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Взял код из хелпа
C++
1
2
3
4
5
6
7
8
9
void __fastcall TOptions::SpeedButton1Click(TObject *Sender)
{
AnsiString Dir = "C:\\Program Files";
const SELDIRHELP = 1000;
if (SelectDirectory(Dir, TSelectDirOpts() << sdAllowCreate << sdPerformCreate << sdPrompt,SELDIRHELP))
{
  Edit1->Text = Dir;
}
}
Выводит ошибку

[bcc32 Error] Unit2.cpp(264): E2285 Could not find a match for 'SelectDirectory(AnsiString,TSelectDirOp ts,const int)'

Работаю в RAD Studio XE4 не могу понять почему вылетает эта ошибка? Заранее благодарен за ответ
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.09.2014, 15:41
Ответы с готовыми решениями:

Embarcadero RAD Studio C++ Builder XE4
XE4 Кстати поделитесь опытом, создавал ли кто-то приложения на FMX (FireMonkey) , лучше ли она VCL, так как понимаю только FMX...

RAD Studio XE4 и компоненты для Builder
Есть набор компонент в исходниках и проектах. Для разных версий студии. Как принято в наборах компонент, имена проектов отличаются версией,...

Стиль кнопок Windows 98 RAD Studio XE4
Здравствуйте!! Ребята, подскажите, по такому вопросу. Собирался выпускать проект и для того чтобы программа запускалась на других...

18
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33197 / 21493 / 8233
Регистрация: 22.10.2011
Сообщений: 36,882
Записей в блоге: 12
21.09.2014, 16:06
Лучший ответ Сообщение было отмечено Sasha как решение

Решение

Работаешь в RAD XE4, и все никак не откажешься от использования AnsiString? Пора бы уже. Замени на String (или UnicodeString) - будет компилироваться...

Цитата Сообщение от Sasha Посмотреть сообщение
Взял код из хелпа
В хелпе нет ничего про AnsiString: SelectDirectory (C++)
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
21.09.2014, 21:01  [ТС]
Спасибо, был не внимательным!!!!
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
22.09.2014, 00:40  [ТС]
А можно ли сделать вот такой вот диалог как показано на скриншоте?
Миниатюры
SelectDirectory в RAD Studio XE4  
0
 Аватар для DeadHipo
85 / 85 / 33
Регистрация: 21.09.2013
Сообщений: 339
22.09.2014, 01:21
Sasha,
Я вызываю так...

C++
1
2
3
4
5
6
7
8
9
10
11
#include "FileCtrl.hpp"
 
// ------------------Выбор директории-----------------------------------------
WideString select_dir() {
    String initfolder = "Desktop", selected_folder;
    SelectDirectory("Выберите папку", "Desktop", selected_folder,
        TSelectDirExtOpts() << sdNewUI << sdValidateDir << sdShowEdit <<
        sdNewFolder, 0);
    WideString myPath = selected_folder + "\\";
    return myPath;
}
Добавлено через 4 минуты
C++
1
TSelectDirExtOpts() << sdValidateDir, 0);
Вот так, что бы было как у тебя на скрине

Добавлено через 1 минуту
C++
1
2
SelectDirectory("Выберите папку на Delphi(Дельфи)", "Desktop", selected_folder,
        TSelectDirExtOpts() << sdValidateDir, 0);
Точнее*
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33197 / 21493 / 8233
Регистрация: 22.10.2011
Сообщений: 36,882
Записей в блоге: 12
22.09.2014, 01:28
Лучший ответ Сообщение было отмечено Sasha как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <ShlObj.h>
 
// ...
 
int __stdcall BrowseProc(HWND hwnd,UINT uMsg, LPARAM lParam, LPARAM lpData )
{
    switch(uMsg)
    {
        case BFFM_INITIALIZED:
            SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData);
            break;
    }
    return 0;
}
 
 
String __fastcall SelectDirectory()
{
    BROWSEINFO bi;
    TCHAR path[MAX_PATH + 1] = {0};
 
    String start =  L"C:\\Windows";
 
    ZeroMemory(&bi, sizeof(bi));
    bi.hwndOwner = 0;
    bi.lpfn = BrowseProc;
    bi.lParam = LPARAM(start.t_str());
    bi.lpszTitle = L"Select your folder:";
    bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;
    LPITEMIDLIST item = ::SHBrowseForFolder(&bi);
    if(item)
    {
        ::SHGetPathFromIDList(item, path);
    }
    return String(path);
}
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    String s = SelectDirectory();
    ShowMessage(s);
}
Устроит?
Миниатюры
SelectDirectory в RAD Studio XE4  
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33197 / 21493 / 8233
Регистрация: 22.10.2011
Сообщений: 36,882
Записей в блоге: 12
22.09.2014, 01:31
Цитата Сообщение от DeadHipo Посмотреть сообщение
Вот так, что бы было как у тебя на скрине
Вот так даже компиляцию на XE+ не пройдет...
0
 Аватар для DeadHipo
85 / 85 / 33
Регистрация: 21.09.2013
Сообщений: 339
22.09.2014, 01:38
Лучший ответ Сообщение было отмечено Sasha как решение

Решение

UI, странно, я проверял...
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
22.09.2014, 13:40  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Вот так даже компиляцию на XE+ не пройдет...
Да действительно не компилируется
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
22.09.2014, 14:32  [ТС]
UI, я знаю что ты не выкладываешь не рабочие коды, но твой код тоже не компилируется

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
__fastcall TOptions::TOptions(TComponent* Owner)
        : TForm(Owner)
{
   name = ExtractFileName(ChangeFileExt(Application->ExeName,""));
}
//---------------------------------------------------------------------------
int __stdcall BrowseProc(HWND hwnd,UINT uMsg, LPARAM lParam, LPARAM lpData)
{
    switch(uMsg)
    {
        case BFFM_INITIALIZED:
            SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData);
            break;
    }
    return 0;
}
 
//---------------------------------------------------------------------------
String __fastcall SelectDirectory()
{
    BROWSEINFO bi;
    TCHAR path[MAX_PATH + 1] = {0};
 
    String start =  L"C:\\Windows";
 
    ZeroMemory(&bi, sizeof(bi));
    bi.hwndOwner = 0;
    bi.lpfn = BrowseProc;
    bi.lParam = LPARAM(start.t_str());
    bi.lpszTitle = L"Select your folder:";
    bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;
    LPITEMIDLIST item = ::SHBrowseForFolder(&bi);
    if(item)
    {
        ::SHGetPathFromIDList(item, path);
    }
    return String(path);
}
//---------------------------------------------------------------------------
Вот скриншот
Миниатюры
SelectDirectory в RAD Studio XE4  
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
22.09.2014, 19:50  [ТС]
UI, странно взял чистый проект и вписал туда этот код заработало как надо

Добавлено через 4 минуты
DeadHipo, твой код тоже работает в чистом проекте

Добавлено через 5 минут
UI, единственное что хотел спросить что вылетает Warning в этой строке
C++
1
    bi.lParam = LPARAM(start.t_str());
[bcc32 Warning] Unit2.cpp(47): W8111 Accessing deprecated entity '_fastcall UnicodeString::t_str() const'
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
23.09.2014, 04:22
Цитата Сообщение от Sasha Посмотреть сообщение
[bcc32 Warning] Unit2.cpp(47): W8111 Accessing deprecated entity '_fastcall UnicodeString::t_str() const'
Современные билдеры осуждают использование t_str, что и пишется в предупреждении. Подробнее, но на английском можно почитать здесь.
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,353
Записей в блоге: 3
23.09.2014, 07:14
Sasha, я, когда пересел на XE3, для выбора папки стал использовать FileOpenDialog из палитры Vista Dialogs. Там, если выставить опцию fdoPickFolders, будет выбор папки, иначе (по умолчанию) выбор файла как у компонента OpenDialog
2
72 / 61 / 24
Регистрация: 20.09.2016
Сообщений: 559
10.10.2016, 07:02
D1973, Спасибо ты крут))
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.10.2016, 16:51
C++
1
2
3
4
5
#include <FileCtrl.hpp>
// #pragma link "vclx.lib" // for  BCB6 only
String Dir;
if(SelectDirectory("Select directory",".",Dir))
    EditDir->Text= Dir;
0
72 / 61 / 24
Регистрация: 20.09.2016
Сообщений: 559
11.10.2016, 12:49
Avazart,
Миниатюры
SelectDirectory в RAD Studio XE4  
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.10.2016, 13:25
Dias606, Попробуйте раскомментировать вторую строчку в моем коде

Добавлено через 7 минут
Но в XE3 работало и без этого.
1
72 / 61 / 24
Регистрация: 20.09.2016
Сообщений: 559
11.10.2016, 13:26
Avazart, Спасибо то что нужно, как предлагал D1973, тоже работает, но там открывается обычное окно, а здесь прям как надо, спасибо!)) XE8
0
1 / 1 / 0
Регистрация: 15.12.2016
Сообщений: 55
06.04.2017, 15:45
Цитата Сообщение от volvo Посмотреть сообщение
int __stdcall BrowseProc(HWND hwnd,UINT uMsg, LPARAM lParam, LPARAM lpData )
{
* * switch(uMsg)
* * {
Спасибо за код.

У меня Rad Studio 10 и, чтобы ваша функция компилировалась нужно изменить две строчки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <ShlObj.h>
int __stdcall BrowseProc(HWND hwnd,UINT uMsg, LPARAM lParam, LPARAM lpData )
{
    switch(uMsg)
    {
        case BFFM_INITIALIZED:
            SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData);
            break;
    }
    return 0;
}
 
String __fastcall SelectDirectory()
{
    BROWSEINFO bi;
    TCHAR path[MAX_PATH + 1] = {0};
 
    String start =  L"C:\\Windows";
    String mess = L"Выбор каталога:";
 
    ZeroMemory(&bi, sizeof(bi));
    bi.hwndOwner = 0;
    bi.lpfn = BrowseProc;
    bi.lParam = LPARAM(start.t_str());
    bi.lpszTitle = mess.t_str();
    bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;
    LPITEMIDLIST item = ::SHBrowseForFolder(&bi);
    if(item)
    {
        ::SHGetPathFromIDList(item, path);
    }
    return String(path);
}
//------------//Выбор каталога--------------------------------------------------
 
//Вызов: 
 
String s = SelectDirectory();
    ShowMessage(s);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.04.2017, 15:45
Помогаю со студенческими работами здесь

В чем отличие Embarcadero rad studio xe2 и xe4?
Добрый день Скажите пжл в чем отличие xe2 и xe4. Написал программу на хе2 на одном ПК, запускаю на другом где установлена хе4,...

Не запускается проект rad studio xe3 на xe4 - xe5
Здравствуйте столкнулся со следующей проблемой. при запуске проекта созданного на rad studio xe3. на rad studio xe4 - xe 5 . вылазиет...

RAD XE4
Здравствуйте уважаемые форумчане, я пишу не много не в том разделе, но более подходящего не нашёл. устанавливаю RAD XE4 , объясните...

Копирование потоков. RAD XE4
Доброго вам! Вот код: void __fastcall TIDThread::Execute() { TMemoryStream *m = new TStringStream(); TStringList *slRaw = new...

Std::string в UnicodeString RAD XE4
Доброго времени суток. Как переменной UnicodeString присвоить значение из переменной std::string? пробовал так: std::string...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru