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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.02.2020, 14:03   #1  
oleggy is offline
oleggy
Участник
 
253 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
диалоговые окна WinAPI
Подскажите при использовании диалогового окна WinAPI
X++:
path = WinAPI::getOpenFileName("Please select your file");
система ругается "Аргумент "_hwnd" несовместим с требуемым типом."
Подскажите как правильно вызвать.

И еще, как отследить что нажал пользователь. OK или Cancel ?

Последний раз редактировалось oleggy; 28.02.2020 в 14:06.
Старый 28.02.2020, 14:13   #2  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
642 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Где вы хотите применить данный финт?
Случайно не в классе-наследнике RunBase?
__________________
// no comments
Старый 28.02.2020, 14:45   #3  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
первый параметр этой функции должен быть int (_hwnd), а у Вас : "Please select your file"
X++:
client static str #fileNamelength getOpenFileName(int              _hwnd,
                           FilenameFilter   _conFilter,
                           str              _strInitialPath,
                           str              _dialogTitle,
                           str              _strDefaultExtension='',
                           str              _strDefaultFileName='',
                           int              _flags = #OFN_FILEMUSTEXIST)
вот job-ик с примером
X++:
static void JobOpenFileName(Args _args)
{
    FileNameFilter filter = ['Все файлы','*.*'];
    str filename;
    ;
    filename = Winapi::getOpenFileName(0,filter,'', 'Выберите файл', '*.*','');
    
    if (filename)
    {
        info('ok');
        info(filename);
    }
    else
    {
        info('отмена');
    }
    
}
можно использовать .NET
X++:
static void JobOpenFileName_NET(Args _args)
{
    System.Windows.Forms.OpenFileDialog _Dialog;
    System.Windows.Forms.DialogResult   _DialogResult;
    System.Windows.Forms.DialogResult   okResult;
    str                                 selectedPath;
    int                                 resultValue;
    int                                 okValue;
    ; 
    _Dialog = new System.Windows.Forms.OpenFileDialog();
    
    _DialogResult = _Dialog.ShowDialog();    
 
    // Get the value from the dialog
    resultValue = CLRInterop::getAnyTypeForObject(_DialogResult);

    // Parse the OK enumeration of the enum DialogResult
    okResult = CLRInterop::parseClrEnum('System.Windows.Forms.DialogResult', 'OK');
    
    // Get the int value of the OK enumeration
    okValue = CLRInterop::getAnyTypeForObject(okResult);

    // If the dialog is ended with OK, get the value or set it to blank
    selectedPath = okValue & resultValue ? _Dialog.get_FileName() : '';        
    
    if (selectedPath)
    {
        info('ok');
        info(selectedPath);
    }
    else
    {
        info('отмена');
    }
}
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.

Последний раз редактировалось Pustik; 28.02.2020 в 15:24.
Старый 28.02.2020, 15:57   #4  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
642 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Я все же верю, что это нужно в RunBase-классе.
Для этого просто пропишите в методе dialog():
X++:
dialogFilename = dialog.addFieldValue(typeid(FilenameOpen), filename);
И не забудьте объявить в ClassDeclaration
X++:
    DialogField             dialogFilename;
    Filename                filename;
__________________
// no comments
За это сообщение автора поблагодарили: S.Kuskov (2).
Старый 29.02.2020, 07:38   #5  
oleggy is offline
oleggy
Участник
 
253 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
не для RunBase класса...
А диалоговое окно сохранения файла?
Старый 29.02.2020, 11:43   #6  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
Как знать как знать...
Смотря откуда и для чего идет сохранение.
По хорошему бы на RunBase передалать
Старый 01.03.2020, 16:32   #7  
oleggy is offline
oleggy
Участник
 
253 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
обычное сохранение файла.
Разве не существует на основе WinAPI ?
Старый 01.03.2020, 22:09   #8  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,273 / 3466 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от oleggy Посмотреть сообщение
обычное сохранение файла.
Разве не существует на основе WinAPI ?
В системе - нет. Есть стандартный тип данных FilenameSave (если нужно указать файл на форме, на которой еще миллион полей) и наследник RunBase, если нужно вывести диалог с кнопками ОК, Отмена.
__________________
Возможно сделать все. Вопрос времени
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axaptapedia: WinAPI Blog bot DAX Blogs 0 04.07.2011 12:11
Модальные диалоговые окна Katuxa DAX: Программирование 7 13.05.2011 15:08
Dynamics AX Geek: Finding files with WinAPI Blog bot DAX Blogs 1 08.10.2009 17:36
Dynamics AX Geek: Finding files with WinAPI Blog bot DAX Blogs 0 28.10.2006 16:40
WinApi. Удаление файлов глючит. NJD DAX: Программирование 10 05.12.2003 13:31
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:56.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.