AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.08.2006, 16:41   #1  
jonny is offline
jonny
Участник
Аватар для jonny
Самостоятельные клиенты AX
 
217 / 124 (5) +++++
Регистрация: 10.02.2006
Адрес: СПб-Екб-?
WinApi::getOpenFileName()
Кто0нибудь пробовал сделать WinApi::getOpenFileName() с возможностью выбора нескольких файлов?
Уткнулся в то что вот эта строка

sFileName = bFileName.string(#offset0);

вернет из буфера только путь к папке, в которой лежат открываемые файлы( в случае выбора нескольких файлов ф-я getOpenFileName возвращает путь к папке и названия выбранных файлов)
Как бы это обойти?
Старый 28.08.2006, 16:48   #2  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Ох... кажется, как параметр ставил контейнер. Попробуйте.

С Уважением,
Геогрий
Старый 28.08.2006, 16:54   #3  
jonny is offline
jonny
Участник
Аватар для jonny
Самостоятельные клиенты AX
 
217 / 124 (5) +++++
Регистрация: 10.02.2006
Адрес: СПб-Екб-?
Ээээ... как параметр к чему?
Старый 28.08.2006, 18:04   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Переделайте этот метод так
X++:
#define.fileNamelength(1024*4)
str         getOpenFileName(int              _hwnd,
                           FilenameFilter   _conFilter,
                           str              _strInitialPath,
                           str              _dialogTitle,
                           str              _strDefaultExtension='',
                           str              _strDefaultFileName='',
                           int              _flags = #OFN_FILEMUSTEXIST)
{
    Binary  oFN, bFileName, bStrFilter, bStrInitialPath, bDialogTitle, bstrDefaultExtension;
    str     tmpstr;
    str     sFileName;
    str     dirName, file;
    int     strOffset, i;
    Info    info;

    DLL         _DLL             = new DLL('COMDLG32');
    DLLFunction _getOpenFileName = new DLLFunction(_DLL, 'GetOpenFileNameA');
    _getOpenFileName.returns(ExtTypes::DWord);
    _getOpenFileName.arg(ExtTypes::Pointer);

    strOffset = 0;
    strOffset = 0;
    for (i=1; i<=conLen(_conFilter); i++)
    {
        tmpstr = conPeek(_conFilter, i);
        if (i mod 2)
            tmpstr += ' ('+conPeek(_conFilter, i+1)+')';
        strOffset += 1 + strLen(tmpstr);
    }

    info                 = new Info();
    bFileName            = new Binary(#fileNamelength);
    oFN                  = new Binary(#structSize);
    bStrFilter           = new Binary(strOffset + 2);
    bstrDefaultExtension = new Binary(#fileNamelength);
    bStrInitialPath      = new Binary(_strInitialPath);
    bDialogTitle         = new Binary(_dialogTitle);

    bFileName.string(#Offset0, _strDefaultFileName);

    strOffset = 0;
    for (i=1; i<=conLen(_conFilter); i++)
    {
        tmpstr = conPeek(_conFilter, i);
        if (i mod 2)
            tmpstr += ' ('+conPeek(_conFilter, i+1)+')';
        bStrFilter.string(strOffset, tmpstr);
        strOffset += 1 + strLen(tmpstr);
    }

    oFN.dWord( #Offset0    , #structSize);
    oFN.dWord( #offset4    , _hwnd);
    oFN.dWord( #offset8    , info.instance());
    oFN.binary(#offset12   , bStrFilter);
    oFN.dWord( #offset16   , 0);
    oFN.dWord( #offset20   , 0);
    oFN.dWord( #offset24   , 1);
    oFN.binary(#offset28   , bFileName);
    oFN.dWord( #offset32   , #fileNamelength);
    oFN.dWord( #offset36   , 0);
    oFN.dWord( #offset40   , 0);
    oFN.binary(#offset44   , bStrInitialPath);
    oFN.binary(#offset48   , bDialogTitle);
    oFN.dWord( #offset52   , #OFN_HIDEREADONLY |
                             #OFN_PATHMUSTEXIST |
                             #OFN_SHAREAWARE |
                             #OFN_NOCHANGEDIR |
                             _flags |
                             #OFN_EXPLORER);
    oFN.word(  #offset56   , 0);
    oFN.word(  #offset58   , 0);
    oFN.binary(#offset60   , bstrDefaultExtension);
    oFN.dWord( #offset64   , 0);
    oFN.dWord( #offset68   , 0);
    oFN.dWord( #offset72   , 0);

    if(_getOpenFileName.call(oFN))
    {
        if (_flags & #OFN_ALLOWMULTISELECT)
        {
            dirName = bFileName.string(#Offset0);
            i = strlen(dirName) + 1;
            sFileName = "";
            while (bFileName.byte(i))
            {
                file = bFileName.string(i);
                i += strlen(file) + 1;
                sFileName += dirName + "\\" + file + (bFileName.byte(i) ? ";" :  "" );
            }
        }
        else
            sFileName = bFileName.string(#Offset0);
    }
    else
        sFileName = '';

    i = strLen(sfilename);
    return sFileName;
}
В случае множественного выбора будет возвращаться строка с выбранными файлами, разделенная точкой с запятой (; )
В макрос #fileNamelength установите размер побольше, чтобы гарантированно влезли все выбранные вами файлы (можно устанавливать размер точно, но придется повторно вызывать окно выбора)
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: fomenka (1), Ace of Database (5), gl00mie (3), jonny (1), alex55 (2), samolalex (1).
Старый 29.08.2006, 09:59   #5  
jonny is offline
jonny
Участник
Аватар для jonny
Самостоятельные клиенты AX
 
217 / 124 (5) +++++
Регистрация: 10.02.2006
Адрес: СПб-Екб-?
Вот супер, спасибо!
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Axapta WinAPI::SewWindow... кто знает как? UNRW DAX: Программирование 2 26.09.2008 15:28
Dynamics AX Geek: Finding files with WinAPI Blog bot DAX Blogs 0 28.10.2006 16:40
WinAPI. Ссылка (POINT) третьего уровня вложенности Владимир Максимов DAX: Программирование 2 06.02.2006 16:28
WinAPI::getLastError() DreamCreator DAX: Программирование 4 20.06.2005 10:03
WinApi. Удаление файлов глючит. NJD DAX: Программирование 10 05.12.2003 13:31
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:27.