Здравствуйте, уважаемые коллеги!
Столкнулся с ситуацией: требовалось вставить в ImageDataСontrol на карточке картинку из буфера обмена. К примеру, нажал пользователь PrintScreen, щёлкнул на карточке кнопку, картинка и вставилась. Казалось бы, чего проще... А не тут-то было!
Самый очевидный способ не сработал. Пишет в ответ: "Разрушительный сбой":
var Stream = System.CopyClipboardToStream();
edtScreenShot.DataField.SetValAsBlob(Stream);
Stream этот какой-то странный, ни свойств, ни методов, просто кусок двоичного кода. Я этот код увидел, когда сделал так:
System.StreamToMime(Stream);
На восемь мегабайт каракатиц. Но где наша не пропадала! Есть ведь путь посложнее, взять ImageList, и через Image прочитать картинку из Stream, сохранить в файл, а потом этот файл автоматически открыть методом поля типа Blob.
Написал так:
var Stream = System.CopyClipboardToStream();
var ImageList = Services.CreateItem('ImageList');
var Image = ImageList.CreateImage();
Image.ImageType = 1;
Image.LoadFromStream(Stream);
Image.SaveToFile('c:\Temp.bmp');
Система всё это лихо выполнила, ни разу не кашлянула. Но файл получился нулевой длины. Так что вставлять в Blob после этой операции уже было нечего...
Наконец (верно от отчаяния) я решил подсунуть вместо этого таинственного Stream известный и понятный ADODB.Stream. Только как бы в него засунуть то, что в буфере обмена? Я написал такое:
var Stream = System.CopyClipboardToStream();
var Mime = System.StreamToMime(Stream);
var ADODBStream = new ActiveXObject('ADODB.Stream');
ADODBStream.Mode = 3;//Кстати, кто знает, что означают эти числа?
ADODBStream.Type = 1;//Расскажите, а то я просто скопировал из другого примера...
ADODBStream.Open();
System.MimeToStream(Mime, ADODBStream);
ADODBStream.SaveToFile('c:\Temp1.bmp');
Способ сработал, все весемь мегабайт каракатиц выгрузились в Temp1.bmp, только файл был не в формате BMP, а именно в виде строки Mime. Естественно, картинку прочитать невозможно.
Итак, у меня ничего не получилось. Но, может быть, я просто пошёл неправильным путём? Кто подскажет, вдруг эта задача уже решалась? Кто что знает о сохранении картинок из буфера обмена, либо об их вставке в Blob-поле? Использовал версию 3.2.1.58.