Добавить программно картинку в

Хочу добавить картинку в 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, можно прямо в отладчике. Если таких методов нет — простым способом удалить не получится.

Показать все комментарии