|  | 
|  20.06.2007, 09:06 | #1 | 
| Участник | работа с ресурсом 
			
			Коллеги подскажите плиз элементарную вещь. Я создал resource из файла, картинку. И хочу в зависимости от условий текущего record на форме выводить дисплей- метод, показывающий эту картинку в виде иконки. Как это делать в случае #resappl я знаю - надо создать display int метод и подключив макрос выводить номер ресурса соответственно, а как быть в моем случае чтобы добиться того же ??? | 
|  | 
|  20.06.2007, 09:55 | #2 | 
| Участник | 
			
			Придется сохранять рисунок на диск. 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 ""; } Можно, конечно, оптимизировать - сохранять в файл при старте формы, а из дисплей-метода возвращать только путь. 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  20.06.2007, 10:02 | #3 | 
| Участник | 
			
			Вместо этого кода можно заюзать уже готовый X++: display str 255 getImagePath(InventTable _inventTable) { ; if (_inventTable.ItemId == "1000") return SysResource::getImagePath("temp"); return SysResource::getImagePath("testResName"); } | 
|  | 
|  20.06.2007, 12:16 | #4 | 
| Участник | 
			
			СПАСИБО
		 | 
|  | 
|  20.06.2007, 10:51 | #5 | 
| Участник | 
			
			Угу. Именно с него и дернул   
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  20.06.2007, 12:40 | #6 | 
| Moderator | 
			
			Надеюсь, что правильно понял первоначальный вопрос.   У меня есть метод, создающий 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 | 
| Moderator | 
			
			Кстати, я заметил неприятный эпизодический баг, что в 3-ке, что 4-ке, когда при экспорте/импорте ресурса Axapta дозаписывает несколько байт в мой ресурс после чего он перестает работать, как ожидалось.  Происходит это 1 раз из 4-х и закономерности я не выявил. Поэтому посылаю клиенту проект, я на всякий случай также посылаю набор ресурсов, не затянутых в Аксапту, и скрипт их туда затягивающий. | 
|  | 
|  13.07.2007, 11:34 | #8 | 
| Moderator | 
			
			Недавно переносил один из проектов, использующих эту методику на новую версию 4-ки и ровно на 50% клиентов получил проблему именно в этом коде.  На строке image.setData(...) клиент падает. Закономерности (почему именно эти 50% машин) уловить не удалось, но причина проблемы понятна. Image, как наследник BinData, похоже живет только на клиенте и ресурс, загруженный на сервере не всегда удачно трансферится на клиент. Косвенным подтверждением этой теории является SysDeployer, который не передает BinData с сервера на клиент и обратно, а предварительно разворачивает данные контейнер (помоему, это самая устойчивая структура при передача с сервера на клиент). В общем, будьте осторожны с этим кодом. В моем проекте, слишком многое было уже завязано на эти рисунки и отказаться от них я уже не мог - привыкли пользователи, интерфейс им был очень понятен и удобен и т.д. Поэтому я сделал опцию, которая в случае, если пользователю не получается вставить image в imageList непосредственно из resource, выгружает картинку во временную директорию пользователя и работает уже с ней. | 
|  | |
| За это сообщение автора поблагодарили: EVGL (4). | |
|  | 
|  Похожие темы | ||||
| Тема | Ответов | |||
| Сергей Герасимов: На что похожа работа в технической поддержке | 0 | |||
| Доступ к меню "Работа с документами" | 4 | |||
| Совместная работа заказчика и исполнителя в разных или одном слое? | 6 | |||
| Опции темы | Поиск в этой теме | 
| Опции просмотра | |
| 
 |