Форум программистов, компьютерный форум, киберфорум
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. Показов 7361. Ответов 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
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 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
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 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
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 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
9922 / 6458 / 2457
Регистрация: 21.01.2014
Сообщений: 27,408
Записей в блоге: 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
8488 / 6155 / 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
8488 / 6155 / 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
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru