|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Вызов из 1С ActiveX написанного на Delphi: Доступ к элементу "Картинка".
Вызов из 1С ActiveX написанного на Delphi: Доступ к элементу "Картинка".
Помогите разобраться: Создал на Delphi-7 ActiveX. Поместил его в 1Cv8 на форму. Из модуля формы 1Сv8 вызываю мною созданный в ActiveX метод: ЭлементыФормы.ЭлементУправления1.InfoPicture(Элеме нтыФормы.ПолеКартинки1.Картинка.ПолучитьДвоичныеДа нные()); В Delphi метод объявил так: procedure InfoPicture(vParam :Variant); Мне надо обратиться к графическому содержимому Картинки (а'ля Canvas). Тип по i := VarType(vBin); получается - varDispatch - "Ссылка на Automation-объект (интерфейсный указатель IDispatch)". Мои попытки преобразовать Variant к типу TBitmap не увенчались успехом. Не знаю как к нему, этому vParam, подступиться. Кто подскажет? |
#2
|
|||
|
|||
Смотри какие интерфейсы можно у него вызвать.
С 1С не работал, но в принципе надо смотреть к чему можно привести полученный IDispatch. Попробуй получить у него что-нибудь типа IPicture или IStream. |
#3
|
|||
|
|||
lmikle! За совет спасибо.
Продвинулся так: в 1С добавил предварительную сериализацию. Получилось вот что: Код:
// Сериализация объекта: выгрузка объекта в XML строку ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(); ЗаписатьXML(ЗаписьXML,ЭлементыФормы.ОбъектИзображение.Картинка.ПолучитьДвоичныеДанные()); ЭлементыФормы.лементУправления1.InfoPicture(ЗаписьXML.Закрыть()); Декодирую входные данные с помощью своей функции: Код:
ImageData := decodeBase64(vParam); // array of Byte; Теперь уперся, как обратиться к этой переменной, чтобы вытащить из нее Canvas или привести к типу TBitmap. Кто подскажет, как загрузить BMP-файл из переменной? |
#4
|
|||
|
|||
Попробуй сохранить в поток (TMemoryStream), а потом компонентом TBitmap вычитать оттуда.
|