Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема АктивХ (число прочтений - 913 )
recop
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 247
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
АктивХ
19. Января 2019 :: 19:28
Печать  
Кто-нибудь мне объяснит работу объекта АктивХ:

...
actxBasis.УстановитьАтрибут(КонтФормы.Форма,ИдАтрибутаФормы);
actxBasis.СоздатьЭУ("SemenPic.SemenPicture");
Basis=actxBasis.Объект;
...

Basis - глобальная переменная.

Затем везде в модуле формы вызов формируем игнорируя Basis:

actxBasis.Объект.ПоказатьКартинку(GflAX_Start,"");

, и если мы удаляем строку "Basis=actxBasis.Объект;" всё работает без нареканий, но при этом при закрытии формы происходит вылет из 1с.

Столкнулся с этим пытаясь динамически создать некоторое число объектов.
Как это можно красиво обойти?

При этом actxBasis вполне себе прекрасно может быть локально переменной.
  
Наверх
 
IP записан
 
Logan
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 9
Зарегистрирован: 21. Апреля 2018
Пол: Мужской
Re: АктивХ
Ответ #1 - 07. Февраля 2019 :: 11:04
Печать  
"actxBasis" - элемент управления activex в 1с.
"Basis" или "actxBasis.Объект" это объект самого activex.
Насколько я понял строчка "Basis=actxBasis.Объект;" напугала, потому что дальше общение с activex идет через actxBasis.Объект. Но это одно и тоже, видимо автор написал лишнюю строку. Вылетает скорее всего не через эти переменные... Покажи весь код, можно будет что-то сказать больше.
  
Наверх
 
IP записан
 
recop
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 247
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
Re: АктивХ
Ответ #2 - 02. Марта 2019 :: 22:16
Печать  
Logan писал(а) 07. Февраля 2019 :: 11:04:
... Покажи весь код, можно будет что-то сказать больше.


Сейчас делаю вот так:

Код
Выбрать все
var obj00, obj01, obj02, obj03, obj04, obj05, obj06, obj07, obj08, obj09, obj10, obj11, obj12, obj13, obj14, obj15;

//+++-recop----------------------------- создать атрибут формы для объекта ActiveX
procedure CreateAttribForActiveX(Button)
	var ButtonID,Attrib;

	Attrib=IVr.ExtForm.ПолучитьАтрибут(IVr.Attribute);

	IVr.ВсегоКнопок=IVr.ВсегоКнопок+1;
	ButtonID="#"+IVr.Attribute+Button.AttribID; // идентификатор элемента диалога, на месте которого будет создан элемент ActiveX
	Button.Attrib = IVr.ExtForm.ДобавитьАтрибут(ButtonID,1);
	Button.Attrib.Layer=Attrib.Layer;
	Button.ActiveX.УстановитьАтрибут(IVr.Context.Форма,Button.Attrib.AttribID);
	Button.ActiveX.СоздатьЭУ("SemenPic.SemenPicture");

	//{ присвоим переменной модуля OLE-объекты АктивХ (без этого при закрытии формы 1с вылетает)
		if IVr.ВсегоКнопок=1 then
			obj01=Button.ActiveX.Объект;
		elsif IVr.ВсегоКнопок=2 then
			obj02=Button.ActiveX.Объект;
		elsif IVr.ВсегоКнопок=3 then
			obj03=Button.ActiveX.Объект;
		elsif IVr.ВсегоКнопок=4 then
			obj04=Button.ActiveX.Объект;
		elsif IVr.ВсегоКнопок=5 then
			obj05=Button.ActiveX.Объект;
		elsif IVr.ВсегоКнопок=6 then
			obj06=Button.ActiveX.Объект;
		elsif IVr.ВсегоКнопок=7 then
			obj07=Button.ActiveX.Объект;
		elsif IVr.ВсегоКнопок=8 then
			obj08=Button.ActiveX.Объект;
		elsif IVr.ВсегоКнопок=9 then
			obj09=Button.ActiveX.Объект;
		elsif IVr.ВсегоКнопок=10 then
			obj10=Button.ActiveX.Объект;
		elsif IVr.ВсегоКнопок=11 then
			obj11=Button.ActiveX.Объект;
		elsif IVr.ВсегоКнопок=12 then
			obj12=Button.ActiveX.Объект;
		elsif IVr.ВсегоКнопок=13 then
			obj13=Button.ActiveX.Объект;
		elsif IVr.ВсегоКнопок=14 then
			obj14=Button.ActiveX.Объект;
		elsif IVr.ВсегоКнопок=15 then
			obj15=Button.ActiveX.Объект;
		endif;
		//}

endprocedure // CreateAttribForActiveX()

 

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать