AnsiString a;
char *b;
b = a.c_str();
Диалог открытия ПАПКИ. Где???
(В смысле - как его вызвать из моей программы?)
В палитре Билдера его нет. Но такой существует! Вы все его много раз видели. Его можно увидеть, например, в Билдере, в меню
Project / Options / Directories нажимаем любую кнопку [...] и видим окно "Browse for folder".
Цитата:
Originally posted by SLA
Как воспользоваться СИСТЕМНЫМ диалогом открытия папки?
(В смысле - как его вызвать из моей программы?)
В палитре Билдера его нет. Но такой существует! Вы все его много раз видели. Его можно увидеть, например, в Билдере, в меню
Project / Options / Directories нажимаем любую кнопку [...] и видим окно "Browse for folder".
Как воспользоваться СИСТЕМНЫМ диалогом открытия папки?
(В смысле - как его вызвать из моей программы?)
В палитре Билдера его нет. Но такой существует! Вы все его много раз видели. Его можно увидеть, например, в Билдере, в меню
Project / Options / Directories нажимаем любую кнопку [...] и видим окно "Browse for folder".
Это тебе нужно воспользоваться функцией SelectDirectory из <filectrl.hpp> - она аж в двух вариантах там имеется. Вобщем смотри хелп - там все подробно расписано + экзампл имеется.
[COLOR=darkblue]
//В самом верху
#define NO_WIN32_LEAN_AND_MEAN
#include <shlobj.h>
//********************
//в фунцции
BROWSEINFO dir;
char folder[MAX_PATH];
LPITEMIDLIST item;
memset(&dir,0,sizeof(BROWSEINFO));
dir.hwndOwner = Handle;
dir.pszDisplayName = folder;
dir.lpszTitle = "Выберите путь";
item = SHBrowseForFolder(&dir);
char p[MAX_PATH];
SHGetPathFromIDList(item,p);
if(p[0] != '\0')
Edit4->Text = p;
//******************
[/COLOR]
ExtractFileDir(Application->ExeName)
как это сделать..
(и еще как переделать AnsiString в Char*)
Заранее большое спасибо
Цитата:
Originally posted by AlexSob
(и еще как переделать AnsiString в Char*)
(и еще как переделать AnsiString в Char*)
мда,
Код:
Вот мой рабочий код - пользуйся! Сохрани в файл CALLBACK.cpp и подключай.
Код:
Цитата:
#define NO_WIN32_LEAN_AND_MEAN
#include <shlobj.h>
#include <windows.h>
#include <system.hpp>
#include <sysUtils.hpp>
static AnsiString CurrentDir__;
int __stdcall CallBack (HWND Wnd, UINT uMsg,LPARAM lParam,LPARAM lpData)
{
AnsiString Temp;
if (uMsg == BFFM_INITIALIZED)
{
if (CurrentDir__ == "")
Temp = GetCurrentDir();
else
Temp = ExcludeTrailingBackslash (CurrentDir__);
SendMessage (Wnd,BFFM_SETSELECTION,true,(int )Temp.c_str());
}
return 0;
}
//***************************
AnsiString __fastcall ChoisDir(HWND Handle, AnsiString Title, String Dir = "")
{
CurrentDir__ = Dir;
AnsiString return_;
BROWSEINFO dir;
char folder[MAX_PATH];
LPITEMIDLIST item;
memset(&dir,0,sizeof(BROWSEINFO));
dir.hwndOwner = Handle;
dir.pszDisplayName = folder;
dir.lpfn = CallBack;
dir.lpszTitle = Title.c_str();
item = SHBrowseForFolder(&dir);
char p[MAX_PATH];
SHGetPathFromIDList(item,p);
if(p[0] != '\0')
{
return_ = p;
}
else
return_ = Dir;
return return_;
};
#define NO_WIN32_LEAN_AND_MEAN
#include <shlobj.h>
#include <windows.h>
#include <system.hpp>
#include <sysUtils.hpp>
static AnsiString CurrentDir__;
int __stdcall CallBack (HWND Wnd, UINT uMsg,LPARAM lParam,LPARAM lpData)
{
AnsiString Temp;
if (uMsg == BFFM_INITIALIZED)
{
if (CurrentDir__ == "")
Temp = GetCurrentDir();
else
Temp = ExcludeTrailingBackslash (CurrentDir__);
SendMessage (Wnd,BFFM_SETSELECTION,true,(int )Temp.c_str());
}
return 0;
}
//***************************
AnsiString __fastcall ChoisDir(HWND Handle, AnsiString Title, String Dir = "")
{
CurrentDir__ = Dir;
AnsiString return_;
BROWSEINFO dir;
char folder[MAX_PATH];
LPITEMIDLIST item;
memset(&dir,0,sizeof(BROWSEINFO));
dir.hwndOwner = Handle;
dir.pszDisplayName = folder;
dir.lpfn = CallBack;
dir.lpszTitle = Title.c_str();
item = SHBrowseForFolder(&dir);
char p[MAX_PATH];
SHGetPathFromIDList(item,p);
if(p[0] != '\0')
{
return_ = p;
}
else
return_ = Dir;
return return_;
};