Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Диалоговое окно открыть папку

7.6K
28 декабря 2006 года
[SS]Modest
43 / / 21.06.2006
в шестом билдере есть вообще такой компонент?
мне нужно выбрать путь к папке, но я нашел только компонент который выбирает файл.
309
29 декабря 2006 года
el scorpio
1.1K / / 19.09.2006
Нет, есть VCL-функция SelectDirectory.
P.S. Аналогичная тема есть в ветке Delphi. А поскольку и тут, и там используется VCL - решения тоже совместимые :D
7.6K
29 декабря 2006 года
[SS]Modest
43 / / 21.06.2006
эта функция открывает окно в каком то доисторическом виде. А можно чтобы это окно было типо того как "копировать в папку..." в ХР
10
30 декабря 2006 года
Freeman
3.2K / / 06.03.2004
[QUOTE='[SS]Modest;163791']эта функция открывает окно в каком то доисторическом виде.[/QUOTE]
Обновить Билдер до более современной версии.
7.6K
30 декабря 2006 года
[SS]Modest
43 / / 21.06.2006
Цитата: Freeman
Обновить Билдер до более современной версии.



у меня шестой то трудно работает

9.5K
31 декабря 2006 года
Borgir
97 / / 20.12.2006
Поставь компоненты RxLib, там есть компонент DirectoryEdit. Может он тебе понравится :)
10
31 декабря 2006 года
Freeman
3.2K / / 06.03.2004
[QUOTE='[SS]Modest;163912']у меня шестой то трудно работает[/QUOTE]
Тогда смотри в RX BrowseForDirectory (кажется, так). Модуль, если помню, FileUtil. А если сильно захотеть, можно по MSDN и ручками написать.
294
02 января 2007 года
Plisteron
982 / / 29.08.2003
[QUOTE='[SS]Modest;163637']в шестом билдере есть вообще такой компонент?
мне нужно выбрать путь к папке, но я нашел только компонент который выбирает файл.[/QUOTE]

Код:
#include <string.h>
#include <windows.h>
#include <io.h>
#include <stdio.h>
#include <process.h>
#include <fcntl.h>

static int CALLBACK BrowseCallbackProc (HWND hWnd, UINT uMsg,
                                                 LPARAM lParam, LPARAM lpData)
{
    TCHAR szPath[_MAX_PATH];
    switch (uMsg)
    {
        case BFFM_INITIALIZED:
            if (lpData)
                SendMessage ( hWnd, BFFM_SETSELECTION, TRUE, lpData );
            break;
        case BFFM_SELCHANGED:
            SHGetPathFromIDList ( LPITEMIDLIST(lParam), szPath);
            SendMessage( hWnd, BFFM_SETSTATUSTEXT, NULL, LPARAM(szPath) );
            break;
    }
    return 0;
}

BOOL GetFolder ( LPCTSTR szTitle, LPTSTR szPath, LPCTSTR szRoot,
                                                              HWND hWndOwner )
{
    if ( szPath == NULL )
        return false;

    bool result = false;

    LPMALLOC pMalloc;
    if ( ::SHGetMalloc(&pMalloc) == NOERROR)
    {
        BROWSEINFO bi;
        ::ZeroMemory( &bi,sizeof bi );
        bi.ulFlags   = BIF_RETURNONLYFSDIRS;

        // дескриптор окна-владельца диалога
        bi.hwndOwner = hWndOwner;

        // добавление заголовка к диалогу
        bi.lpszTitle = szTitle;

        // отображение текущего каталога
        bi.lpfn      = BrowseCallbackProc;
        bi.ulFlags  |= BIF_STATUSTEXT;

        // установка каталога по умолчанию
        bi.lParam    = LPARAM(szPath);

        // установка корневого каталога
        if ( szRoot != NULL )
        {
            IShellFolder *pDF;
            if ( SHGetDesktopFolder(&pDF) == NOERROR )
            {
                LPITEMIDLIST pIdl = NULL;
                ULONG        chEaten;
                ULONG        dwAttributes;

                USES_CONVERSION;
                LPOLESTR oleStr = T2OLE ( szRoot );

                pDF->ParseDisplayName ( NULL, NULL, oleStr, &chEaten, &pIdl, &dwAttributes );
                pDF->Release ();

                bi.pidlRoot = pIdl;
            }
        }

        LPITEMIDLIST pidl = ::SHBrowseForFolder ( &bi );
        if ( pidl != NULL )
        {
            if ( ::SHGetPathFromIDList ( pidl, szPath ) )
                result = true;
            pMalloc->Free(pidl);
        }
        if ( bi.pidlRoot != NULL )
            pMalloc->Free ( (void*) bi.pidlRoot );
        pMalloc->Release ();
    }
    return result;
}

Код не мой, поэтому за разного рода погрешности прошу меня не пинать.
9.5K
07 января 2007 года
zergman
53 / / 09.11.2006
Код:
void __fastcall TForm1::SelectFolderClick(TObject *Sender)
{
BROWSEINFO dir;
char folder[MAX_PATH];
LPITEMIDLIST item;
memset(&dir,0,sizeof(BROWSEINFO));
dir.hwndOwner = Handle;
dir.pszDisplayName = folder;
dir.lpszTitle = "Browse folder";
item = SHBrowseForFolder(&dir);
char p[MAX_PATH];
SHGetPathFromIDList(item,p);
if(p[0] != '\0')
Edit1->Text = p;
}

без наворотов)
309
08 января 2007 года
el scorpio
1.1K / / 19.09.2006
Цитата:
char folder[MAX_PATH];


Напомните мне, пожалуйста, а чему равна константа MAX_PATH?
Если 256, то ваша программа будет вылетать со свистом каждый раз, когда ей подсунут любой каталог NTFS, имя которого длиннее, чем по стандарту FAT16 (коему уже давно никто не обязан следовать) :D

294
09 января 2007 года
Plisteron
982 / / 29.08.2003
Цитата: el scorpio
Напомните мне, пожалуйста, а чему равна константа MAX_PATH?
Если 256, то ваша программа будет вылетать со свистом каждый раз, когда ей подсунут любой каталог NTFS, имя которого длиннее, чем по стандарту FAT16 (коему уже давно никто не обязан следовать) :D


Цитата: Plisteron
Код не мой, поэтому за разного рода погрешности прошу меня не пинать.


У кого голова на плечах, тот вместо MAX_PATH что-нибудь да подставит.

7.6K
11 января 2007 года
[SS]Modest
43 / / 21.06.2006
Цитата: zergman
Код:
void __fastcall TForm1::SelectFolderClick(TObject *Sender)
{
BROWSEINFO dir;
char folder[MAX_PATH];
LPITEMIDLIST item;
memset(&dir,0,sizeof(BROWSEINFO));
dir.hwndOwner = Handle;
dir.pszDisplayName = folder;
dir.lpszTitle = "Browse folder";
item = SHBrowseForFolder(&dir);
char p[MAX_PATH];
SHGetPathFromIDList(item,p);
if(p[0] != '\0')
Edit1->Text = p;
}

без наворотов)



а для танкистов можно объяснить как это использовать?, я это в буттонклик ну и послал меня билдер... опять на форум

520
12 января 2007 года
inkognitum
155 / / 03.05.2006
Код:
#define NO_WIN32_LEAN_AND_MEAN

.....

void __fastcall TForm1::SelectFolderClick(TObject *Sender)
{
BROWSEINFO dir;
char folder[MAX_PATH];
LPITEMIDLIST item;
memset(&dir,0,sizeof(BROWSEINFO));
dir.hwndOwner = Handle;
dir.pszDisplayName = folder;
dir.lpszTitle = "Browse folder";
item = SHBrowseForFolder(&dir);
char p[MAX_PATH];
SHGetPathFromIDList(item,p);
if(p[0] != '\0')
Edit1->Text = p;
}
7.6K
13 января 2007 года
[SS]Modest
43 / / 21.06.2006
как я рад, как я рад. Блин сначала не хотело работать. Оказывается вот это #define NO_WIN32_LEAN_AND_MEAN нужно ставить в самом верху, до всех инклудов
9.5K
13 января 2007 года
zergman
53 / / 09.11.2006
[QUOTE='[SS]Modest;166367']как я рад, как я рад. Блин сначала не хотело работать. Оказывается вот это #define NO_WIN32_LEAN_AND_MEAN нужно ставить в самом верху, до всех инклудов[/QUOTE]
я про него забыл сказку расказать)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог