Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Технологии
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.09.2008, 00:32
minister2007 minister2007 вне форума
Прохожий
 
Регистрация: 16.09.2008
Сообщения: 2
Репутация: 10
По умолчанию Вызов из 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  
Старый 16.09.2008, 02:57
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Смотри какие интерфейсы можно у него вызвать.
С 1С не работал, но в принципе надо смотреть к чему можно привести полученный IDispatch. Попробуй получить у него что-нибудь типа IPicture или IStream.
Ответить с цитированием
  #3  
Старый 17.09.2008, 20:46
minister2007 minister2007 вне форума
Прохожий
 
Регистрация: 16.09.2008
Сообщения: 2
Репутация: 10
По умолчанию

lmikle! За совет спасибо.

Продвинулся так:
в 1С добавил предварительную сериализацию. Получилось вот что:

Код:
// Сериализация объекта: выгрузка объекта в XML строку
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ЗаписатьXML(ЗаписьXML,ЭлементыФормы.ОбъектИзображение.Картинка.ПолучитьДвоичныеДанные());

ЭлементыФормы.лементУправления1.InfoPicture(ЗаписьXML.Закрыть());
Далее в Delphi:

Декодирую входные данные с помощью своей функции:
Код:
ImageData := decodeBase64(vParam); // array of Byte;
Теперь у меня в переменной - байт-массив Картинки. Проверял - вылетый BMP-файл.

Теперь уперся, как обратиться к этой переменной, чтобы вытащить из нее Canvas или привести к типу TBitmap.

Кто подскажет, как загрузить BMP-файл из переменной?
Ответить с цитированием
  #4  
Старый 18.09.2008, 02:06
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Попробуй сохранить в поток (TMemoryStream), а потом компонентом TBitmap вычитать оттуда.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:53.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter