Вопрос

Добрый день! 

Возник вопрос как сделать Деталь, где помимо строковых полей, будет содержаться поле с изображениями(маленькие иконки, по нажатию на которую из них, будет открываться отдельная страница с оригинальным размером изображений).

Вопрос:

Как этого можно достичь? Возможно как то переопределить базовую деталь с полями? Или возможно вместо "списка с иконками отображений" (в случае не возможности или трудоемкости достижения поставленной задачи) добавить поле с ссылкой на "хранилище"(вкладку) с изображениями(возможностью редактирования, т.е. добавления/удаления)?

  

У меня такой же вопрос

2 комментария

Такое сделано в дополнении Image preview for bpm'online.

Зверев Александр,

Большое спасибо!

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Хочу добавить картинку в ImageList.

ImageL = Services.GetSingleItemByUSI('il_TDpics');
var FileName = System.CreateObject('TSObjectLibrary.Value');
if (!(System.OpenDialog(FileName, '*.jpg|*.jpg', EmptyStr, EmptyStr, EmptyStr))) {
return;
}
var ImageItem = ImageL.CreateImage();
ImageItem.ImageType = 2;
ImageItem.LoadFromFile(FileName);

Выдает ошибку. См. присоединенный файл. Просьба подсказать решение.
Вручную рисунки добавляются. Такой код работает

var part1 = 'C:\\Program Files\\Terrasoft\\Res\\';
var part2 = dlData.Dataset.DataFields('DeliveryPointID').Value;
var Final_5 = part1 + part2 + '5.jpg';
if (fso.FileExists(Final_5)) {
var ImageList = Services.GetNewItemByUSI('il_CommunicationActionSmartTag');
var ImageItem = ImageList.CreateImage();
ImageItem.LoadFromFile(Final_5);

У меня такой же вопрос

5 комментариев

Если картинка лежит где-то в файловой системе — нужно получить строку с её адресом. У Вас в работающем примере в функцию LoadFromFile передаётся строковая константа. А в первом — какой-то объект, возвращаемый из диалогового окна. Попробуйте в отладчике посмотреть, что передаётся в переменную FileName и в чём отличие от работающего примера.

Также см. пример отсюда, где для аналогичным образом полученного значения используется FileName.Value. Возможно, нужная Вам строка находится там.

Спасибо от ошибки избавился. Но завершить работу не получается. Вот код:

var ImageList = Services.GetNewItemByUSI('il_DPpics');
var FileName = System.CreateObject('TSObjectLibrary.Value');
if (!(System.OpenDialog(FileName, '*.jpg|*.jpg', EmptyStr, EmptyStr, EmptyStr))) {
return;
}
var ImageItem = ImageList.CreateImage();
ImageItem.ImageType = 2;
imgTDp1.ImageList = ImageList;
ImageItem.LoadFromFile(FileName.Value);
ImageList.Add(ImageItem);
imgTDp1.ImageList = ImageList;
imgTDp1.ImageName = dlData.Dataset.DataFields('DeliveryPointID').Value + '1';

Все вроде бы работает. В отладчике я виж, что число изображений в ImageList увеличилось с 3 до 4, вижу правильные размеры картинки. Потом уже из ImageList заполняю imgTDp1 и вижу картинку на форме. Но после того, как я закрываю карточку редактирования, введенная картинка исчезает из ImageList. Методов Open / Save для ImageList я не нашел. Как правильно все закрыть, чтобы результаты работы сохранились? Подробности в присоединенном файле.

Вы меняете объект в памяти, а GetNewItemByUSI берёт его сериализированное представление из базы, где оно хранится вместе с другими сервисами.

Для сохранения сервиса делается:

Services.SaveItem(ImageList, sdoaSave);

См. пример реализации в мастере разделов, в скрипте wnd_LoadWorkspaceIconScript.

Спасибо. Уже почти у цели (см. вложение). Может подскажете, как удалить ImageItem из ImageList
Пробовал, что пришло в голову: Remove(), Delete(), ImageList.Items(i) = ImageList.Items(i + 1)? но не вышло. Может быть, менять Name, это возможно?

Увидеть названия всех методов, которые есть у объектов ImageList и ImageItem, можно прямо в отладчике. Если таких методов нет — простым способом удалить не получится.

Войдите или зарегистрируйтесь, чтобы комментировать