Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Важная тема FAQ по ActiveX/АктивИкс (число прочтений - 31183 )
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
FAQ по ActiveX/АктивИкс
21. Июля 2006 :: 21:20
Печать  
Q: Я все делаю согласно документации, но АктивИкс контрол не отображается на форме
A: Скорее всего, переменная, содержащая экземпляр класса АктивИкс объявлена локальной переменной процедуры или не объявлена вовсе.
Время жизни элемента управления связано с временем жизни объекта АктивИкс.
В деструкторе класса созданный контрол уничтожается (если до этого он был создан).
Соответственно необъявленная переменная уничтожается при выходе из области видимости (при завершении работы процедуры "ПослеОткрытия"). Вместе с ней уничтожается и контрол.
Вывод:  нужно объявить ее переменной модуля формы.
Например так:
Код
Выбрать все
Перем Эл;
Процедура ПослеОткрытия()
     Эл = СоздатьОбъект("АктивИкс");
     Эл.УстановитьАтрибут(Форма, "АктХ");
     Эл.СоздатьЭУ("OWC11.Spreadsheet.11");
     Эл.УстановитьФокус();
КонецПроцедуры 

  

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


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: FAQ по ActiveX/АктивИкс
Ответ #1 - 21. Июля 2006 :: 21:49
Печать  
Q: Где найти описание свойств, методов и событий элемента управления Класный.Контрол?
A:
  • Запускаем Excel или Word, жмем Alt+F11 (или Сервис/макрос/редактор VB)
  • жмем F2 (или View/Object Browser)
  • жмем правой кнопкой мышки, в контекстном меню выбираем "References"
  • находим библиотеку типов, где содержится интересующий нас контрол (в списке или ч-з "Browse").
  • в выпадающем списке вверху окна выбираем загруженную библиотеку типов

Как получить документацию по Com-объектам и внешним компонентам без интернета
Можно воспользоваться утилитой Ole View. Она поставляется в комлекте с MS Visual Studio 6.
Или воспользоваться сторонними утилитами, например ActiveX Inspector от Oakland Soft
  

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


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: FAQ по ActiveX/АктивИкс
Ответ #2 - 21. Июля 2006 :: 21:56
Печать  
Пример, в котором показано:
  • отображение событий контрола на методы КОП-наследника АктивИкс
  • код, размещающий АктивИкс на форме
  

ActiveX1cppExample.zip ( 4 KB | Загрузки )

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


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: FAQ по ActiveX/АктивИкс
Ответ #3 - 21. Июля 2006 :: 21:56
Печать  
Еще пример - браузер (автор: denil)
  

www_AX_test_v3.rar ( 5 KB | Загрузки )

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


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: FAQ по ActiveX/АктивИкс
Ответ #4 - 21. Июля 2006 :: 22:10
Печать  
Статья в Книге заний:
Виртуальная реальность VRML в 1С - 3D Now!

Здесь будут накапливаться ссылки, касающиеся АктивИкс:
http://del.icio.us/Steban/%D0%90%D0%BA%D1%82%D0%B8%D0%B2%D0%98%D0%BA%D1%81
« Последняя редакция: 15. Августа 2006 :: 12:34 - steban »  

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


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: FAQ по ActiveX/АктивИкс
Ответ #5 - 26. Сентября 2006 :: 15:06
Печать  
При помощи класса АктивИкс можно размещать на формах элементы управления Windows Forms.
Для этого в качестве ProgID в методе СоздатьЭУ нужно указать полное имя класса-наследника System.Windows.Forms.Control.
например так:
Код
Выбрать все
Грид.СоздатьЭУ("System.Windows.Forms.DataGrid") 


В большинстве систем элементы управления из пространства имен System.Windows.Forms уже зарегистрированы для взаимодействия с COM. Если ето не так, нужно выполнить в командной строке следующую команду:
Код
Выбрать все
regasm C:\WINDOWS\Microsoft.NET\Framework\Версия\System.Windows.Forms.dll 


Аналогично надо поступить со сборками сторонних поставщиков, если планируется их использование как COM-компонентов.
  

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


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: FAQ по ActiveX/АктивИкс
Ответ #6 - 27. Сентября 2006 :: 08:47
Печать  
Q: Я использую класс-наследник АктивИкс. Привязываю его к форме методом УстановитьАтрибут класса АктивИкс.
Почему не вызываются обработчики события из модуля класса-наследника?

A: в доке написано: Цитата:
Для обработки событий в модуле реализации КОП экземпляр класса должен быть создан следующим образом:

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




Если использовать метод УстановитьАтрибут класса АктивИкс, то будут вызываться обработчики событий только в модуле формы.
  

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


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: FAQ по ActiveX/АктивИкс
Ответ #7 - 25. Марта 2008 :: 11:40
Печать  
Примеры создания контролов для различных версий компоненты:
  • 1С++ версий 2.0.3.x
    Код
    Выбрать все
    Перем Дерево;
    Процедура ПослеОткрытия()
       АтрФормы = СоздатьОбъект("АтрибутФормы");
       АтрФормы.УстановитьАтрибут(Форма,"ФДерево");
       Дерево=СоздатьОбъект("Дерево");//класс-наследник АктивИкс
       АтрФормы.СоздатьЭлементУправления(Дерево);
       Дерево.СоздатьЭУ("MSComctlLib.TreeCtrl");
    КонецПроцедуры 
    
    
  • 1С++ версий 2.5.x.x совместно с FormEx версий 2.5.x.x
    Код
    Выбрать все
    Перем Дерево;
    Процедура ПослеОткрытия()
        Ф=СоздатьОбъект("Форма");
        Ф.УстановитьФорму(Форма);
        Дерево=Ф.СоздатьЭлементУправления("Дерево","ФДерево");
        Дерево.СоздатьЭУ("MSComctlLib.TreeCtrl");
    КонецПроцедуры 
    
    
  • 1С++ версий 2.5.x.x без FormEx
    Код
    Выбрать все
    Перем Дерево;
    Перем Ф;
    Процедура ПриОткрытии()
        Ф=СоздатьОбъект("Форма");
        Ф.УстановитьФорму(Форма);//при этом можно расчитывать
    			  //на событие ПриСозданииФормы
    КонецПроцедуры
    
    Процедура ФормаПриСоздании() //событие от класса Форма
        Дерево=Ф.СоздатьЭлементУправления("Дерево","ФДерево");
    КонецПроцедуры 
    
    

в примерах "Дерево"-имя класса-наследника АктивИкс
"ФДерево" - идентификатор элемента диалога, на месте которого создается контрол.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать