Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) ActiveX. Методы контрола. (число прочтений - 11111 )
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
ActiveX. Методы контрола.
13. Июля 2006 :: 16:56
Печать  
А можно ли как-то выполнять методы перехваченного ActiveX-контрола?
Не обрабатывать его события, а именно выполнять его родные методы?
  
Наверх
ICQ  
IP записан
 
noprogrammer
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 465
Зарегистрирован: 16. Июня 2006
Re: ActiveX. Методы контрола.
Ответ #1 - 13. Июля 2006 :: 17:05
Печать  
Перехват вроде как именно для этого и делается Подмигивание
  
Наверх
wwwICQ  
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: ActiveX. Методы контрола.
Ответ #2 - 13. Июля 2006 :: 17:15
Печать  
Тьфу, блин, ступил.
Жара.
Вопрос снят.
  
Наверх
ICQ  
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: ActiveX. Методы контрола.
Ответ #3 - 14. Июля 2006 :: 07:14
Печать  
А может и не ступил.
Суть такова.
Есть некий ActiveX контрол. У него есть свойства и события, к которым можно обращаться, как object.КакоеТоСвойство. Тут все понятно. Так же и событиями.
Но у него же есть и методы, к которым нужно обращаться так: control.КакойТоМетод().
Так вот, ключевое слово CONTROL.
Как до него добраться?
Извините, может невнятно объясняю.
  
Наверх
ICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ActiveX. Методы контрола.
Ответ #4 - 14. Июля 2006 :: 08:02
Печать  
http://www.1cpp.ru/docum/html/ActiveX.html
там написано: Цитата:
OLE-объект возвращаемый при выполнении метода может быть сохранен в переменной. В дальнейшем доступ к этому объекту может осуществляться через свойство Объект.

Код
Выбрать все
АтрФормы = СоздатьОбъект("АтрибутФормы");
АтрФормы.УстановитьАтрибут(Форма,"ФДерево");
Дерево=СоздатьОбъект("АктивИкс");
АтрФормы.СоздатьЭлементУправления(Дерево);
Дерево.СоздатьЭУ("MSComctlLib.TreeCtrl");
Дерево.Объект.Refresh();
Дерево.Объект.StartLabelEdit();
Дерево.Объект.Sorted=-1;//TRUE
 


или так:
Код
Выбрать все
АтрФормы = СоздатьОбъект("АтрибутФормы");
АтрФормы.УстановитьАтрибут(Форма,"ФДерево");
Дерево=СоздатьОбъект("АктивИкс");
АтрФормы.СоздатьЭлементУправления(Дерево);
TreeView=Дерево.СоздатьЭУ("MSComctlLib.TreeCtrl");
TreeView.Refresh();
TreeView.StartLabelEdit();
TreeView.Sorted=-1;//TRUE
 

  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: ActiveX. Методы контрола.
Ответ #5 - 14. Июля 2006 :: 08:19
Печать  
steban писал(а) 14. Июля 2006 :: 08:02:
http://www.1cpp.ru/docum/html/ActiveX.html
там написано: Цитата:
OLE-объект возвращаемый при выполнении метода может быть сохранен в переменной. В дальнейшем доступ к этому объекту может осуществляться через свойство Объект.

Код
Выбрать все
АтрФормы = СоздатьОбъект("АтрибутФормы");
АтрФормы.УстановитьАтрибут(Форма,"ФДерево");
Дерево=СоздатьОбъект("АктивИкс");
АтрФормы.СоздатьЭлементУправления(Дерево);
Дерево.СоздатьЭУ("MSComctlLib.TreeCtrl");
Дерево.Объект.Refresh();
Дерево.Объект.StartLabelEdit();
Дерево.Объект.Sorted=-1;//TRUE
 


или так:
Код
Выбрать все
АтрФормы = СоздатьОбъект("АтрибутФормы");
АтрФормы.УстановитьАтрибут(Форма,"ФДерево");
Дерево=СоздатьОбъект("АктивИкс");
АтрФормы.СоздатьЭлементУправления(Дерево);
TreeView=Дерево.СоздатьЭУ("MSComctlLib.TreeCtrl");
TreeView.Refresh();
TreeView.StartLabelEdit();
TreeView.Sorted=-1;//TRUE
 



Это я все знаю и использую.
Попробую объяснить по другому.
В доке по ActiveX контролу написано следующее.
Свойство:
object.BackColorContainer [=long]
Это работает. А вот метод описан так:
control.Refresh()
А вот так нет. Обращаться нужно не к OBJECT, а к CONTROL. А не могу.
  
Наверх
ICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ActiveX. Методы контрола.
Ответ #6 - 14. Июля 2006 :: 08:33
Печать  
Ну тады давай разбираться.....
Код показывай. Что за контрол? Где  дока на него?
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: ActiveX. Методы контрола.
Ответ #7 - 14. Июля 2006 :: 08:37
Печать  
steban писал(а) 14. Июля 2006 :: 08:33:
Ну тады давай разбираться.....
Код показывай. Что за контрол? Где  дока на него?

Доку ~ 1.3Мб потянешь? Формат chm, запакованный еще больше.
Если да, куда слать?
Использую уже несколько месяцев, проблем нет, кроме вызова методов.
  
Наверх
ICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ActiveX. Методы контрола.
Ответ #8 - 14. Июля 2006 :: 08:38
Печать  
Это наверное 3D Active Button Magic ?
Код покажи.
В каком смысле не работает? выдает ошибку? или ничего не делает?
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: ActiveX. Методы контрола.
Ответ #9 - 14. Июля 2006 :: 08:46
Печать  
steban писал(а) 14. Июля 2006 :: 08:38:
Это наверное 3D Active Button Magic ?
Код покажи.

Угадал Улыбка
Вот нашел ссылку на доку http://multimediasoft.com/3dabm/help/
Код
Выбрать все
Процедура КнопкаОК()
КнопкаОК=СоздатьОбъект("АктивИкс");
КнопкаОК.ОбработкаСобытий=1;
КнопкаОК.УстановитьАтрибут(Форма,"КнопкаОК");
КнопкаОК.СоздатьЭУ("BTNENH.BtnEnhCtrl.4");

Об=КнопкаОК.Объект;

Об.Style=2;
Об.Shape=1;
и т.д.    


Это все работает.
А вот вызов методов нет.
Посмотри ссылку по доке.   
  
Наверх
ICQ  
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: ActiveX. Методы контрола.
Ответ #10 - 14. Июля 2006 :: 08:48
Печать  
Цитата:
В каком смысле не работает? выдает ошибку? или ничего не делает?

В смысле пишет "Поле агрегатного объекта не обнаружено"
  
Наверх
ICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ActiveX. Методы контрола.
Ответ #11 - 14. Июля 2006 :: 09:24
Печать  
Методы работают (все не проверял) за исключением DoClick, Refresh, AboutBox.
У этих 3-х методов DISPID > 0xfffff000.
У всех остальных DISPID < 0x00000100.
Код
Выбрать все
	Об=КнопкаОК.Объект;

	Об.Style=2;
	Об.Shape=1;
	Сообщить(ТипЗначенияСтр(Об));
	Сообщить(Об.GetEdition());
	Сообщить(Об.GetVersion());
	Об.ResetProperties();
	Об.EnableButtonCache(-1);
	Об.SetClipChildren(-1);
	Об.InternalRefresh(); 


Наверное вопрос надо ардесовать в 1С:
А почему в 1С не вызываются методы COM/OLE-объектов с DISPID > такого-то?
Насколько я знаю MS диапазон значений DISPID не ограничивает (за исключением нескольких - не больше десятка значений).
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: ActiveX. Методы контрола.
Ответ #12 - 14. Июля 2006 :: 09:29
Печать  
Цитата:
Методы работают (все не проверял) за исключением DoClick, Refresh, AboutBox.

Во как.
А я проверял именно на DoClick и Refresh Улыбка
Спасибо.
  
Наверх
ICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ActiveX. Методы контрола.
Ответ #13 - 14. Июля 2006 :: 09:35
Печать  
Еще в 1С был замечен следующий косяк:
Если COM-объект реализует несколько интерфейсов, то из 1С возможен доступ только к методам и свойствам default-интерфейса. Даже ТипЗначенияСтр(НекийCOMОбъект) возвращает название default-интерфейса.

ЗЫ: В случае с "BTNENH.BtnEnhCtrl.4" неработающие методы - методы default-интерфейса.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ActiveX. Методы контрола.
Ответ #14 - 14. Июля 2006 :: 09:51
Печать  
steban писал(а) 14. Июля 2006 :: 09:35:
Еще в 1С был замечен следующий косяк:
Если COM-объект реализует несколько интерфейсов, то из 1С возможен доступ только к методам и свойствам default-интерфейса. Даже ТипЗначенияСтр(НекийCOMОбъект) возвращает название default-интерфейса.

ЗЫ: В случае с "BTNENH.BtnEnhCtrl.4" неработающие методы - методы default-интерфейса.



Эээ... Ничего пободобного не заметил Улыбка Работаю себе и работаю с такими объектами и жужжу... Улыбка
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать