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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.06.2007, 09:06   #1  
Nikolaich is offline
Nikolaich
Участник
 
238 / 10 (1) +
Регистрация: 15.12.2004
работа с ресурсом
Коллеги подскажите плиз элементарную вещь. Я создал resource из файла, картинку.
И хочу в зависимости от условий текущего record на форме выводить дисплей- метод, показывающий эту картинку в виде иконки. Как это делать в случае #resappl я знаю - надо создать display int метод и подключив макрос выводить номер ресурса соответственно, а как быть в моем случае чтобы добиться того же ???
Старый 20.06.2007, 09:55   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Придется сохранять рисунок на диск.
X++:
display str 255 GetImg()
{
    ResourceNode        resourceNode;
    BinData             binData;
    container           dataContainer;
    FileName            imageName;
    str                 imagePath;
    ;
    resourceNode = infolog.getNode(UtilElementType::Resource, "Имя ресурса");
    resourceNode.AOTload();
    if (SysResource::getResourceNodeType(resourceNode) == SysResourceType::Image)
    {
        imagePath = SysResource::getTempPath(true);
        imagePath = imagePath + resourceNode.filename();
        if (!winapi::fileExists(imagePath))
        {
            dataContainer = SysResource::getResourceNodeData(resourceNode);
            binData = new BinData();
            binData.setData(dataContainer);
            binData.saveFile (imagePath);
        }
        return imagePath;
    }
    return "";
}
С gif-файлами не будет работать.

Можно, конечно, оптимизировать - сохранять в файл при старте формы, а из дисплей-метода возвращать только путь.
__________________
Axapta v.3.0 sp5 kr2
Старый 20.06.2007, 10:02   #3  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Вместо этого кода можно заюзать уже готовый
X++:
display str 255 getImagePath(InventTable _inventTable)
{
    ;
    if (_inventTable.ItemId == "1000")
        return SysResource::getImagePath("temp");

    return SysResource::getImagePath("testResName");
}
Старый 20.06.2007, 10:51   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Угу. Именно с него и дернул
__________________
Axapta v.3.0 sp5 kr2
Старый 20.06.2007, 12:16   #5  
Nikolaich is offline
Nikolaich
Участник
 
238 / 10 (1) +
Регистрация: 15.12.2004
СПАСИБО
Старый 20.06.2007, 12:40   #6  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Надеюсь, что правильно понял первоначальный вопрос.
У меня есть метод, создающий ImageList по контейнеру имен ресурсов, переданному как параметр:

X++:
// создает ImageList на основе контейнера, переданных ресурсов
static ImageList createImageList(container _con)
{
    ImageList          imageList = new ImageList( ImageList::smallIconWidth(),ImageList::smalliconHeight());
    Image              image = new Image();
    ResourceNode       resourceNode;
    int                i;
    ;
    for (i=1; i<=conlen(_con); i++)
    {
        resourceNode = SysResource::getResourceNode(conpeek(_con, i));
        resourceNode.AOTload();
        image.setData(SysResource::getResourceNodeData(resourceNode));
        imageList.add(image);
    }
    return imageList;
}
Соответсвенно на форме:
X++:
    imageList = gm_txRegMainClass::createImageList(['lock', 'final']);
    LockWin.imageList(imageList);
Вариант с выгрузкой ресурсов на диск мне не нравится, так как не всегда можно быть уверенным в том, что его получится выгрузить туда, куда планировал (права доступа, место на диске и т.д.)
За это сообщение автора поблагодарили: leshy (1), kashperuk (5).
Старый 20.06.2007, 13:28   #7  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Кстати, я заметил неприятный эпизодический баг, что в 3-ке, что 4-ке, когда при экспорте/импорте ресурса Axapta дозаписывает несколько байт в мой ресурс после чего он перестает работать, как ожидалось. Происходит это 1 раз из 4-х и закономерности я не выявил.
Поэтому посылаю клиенту проект, я на всякий случай также посылаю набор ресурсов, не затянутых в Аксапту, и скрипт их туда затягивающий.
Старый 13.07.2007, 11:34   #8  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Недавно переносил один из проектов, использующих эту методику на новую версию 4-ки и ровно на 50% клиентов получил проблему именно в этом коде. На строке image.setData(...) клиент падает.
Закономерности (почему именно эти 50% машин) уловить не удалось, но причина проблемы понятна. Image, как наследник BinData, похоже живет только на клиенте и ресурс, загруженный на сервере не всегда удачно трансферится на клиент. Косвенным подтверждением этой теории является SysDeployer, который не передает BinData с сервера на клиент и обратно, а предварительно разворачивает данные контейнер (помоему, это самая устойчивая структура при передача с сервера на клиент).
В общем, будьте осторожны с этим кодом. В моем проекте, слишком многое было уже завязано на эти рисунки и отказаться от них я уже не мог - привыкли пользователи, интерфейс им был очень понятен и удобен и т.д. Поэтому я сделал опцию, которая в случае, если пользователю не получается вставить image в imageList непосредственно из resource, выгружает картинку во временную директорию пользователя и работает уже с ней.
За это сообщение автора поблагодарили: EVGL (4).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Сергей Герасимов: На что похожа работа в технической поддержке Blog bot DAX Blogs 0 04.02.2008 10:40
Доступ к меню "Работа с документами" Kuat DAX: Администрирование 4 16.11.2007 17:07
Совместная работа заказчика и исполнителя в разных или одном слое? Кузин Владимир В. DAX: Программирование 6 08.08.2006 10:02

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

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

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