1 / 26

ActiveX

ActiveX. ActiveX контроли. ActiveX контролите са най-популярната за момента част от ActiveX технологията. Освен тях се използват: ActiveX Data Object ( ADO ) Active Server Pages ( ASP ) Те са COM базирани и следователно се подчиняват на правилата и концепциите в COM модела.

jonah-mack
Download Presentation

ActiveX

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ActiveX

  2. ActiveX контроли • ActiveX контролите са най-популярната за момента част от ActiveX технологията. Освен тях се използват: • ActiveX Data Object (ADO) • Active Server Pages (ASP) • Те са COM базирани и следователно се подчиняват на правилата и концепциите в COM модела.

  3. ActiveX контроли • ActiveX контрол - функционално завършено парче код, пакетирано за многократно използване и предоставящо определен интерфейс за взаимодействие с клиентите си. • ActiveX контролът е COM обект, но задължен да имплементира определени интерфейси, които го карат да се държи като контрол. • ActivеX контролите задължително имплементират само интерфейса IUnknown. • Повечето контроли имплементират интерфейса IDispatch, което ги прави Automation сървъри (експонират методи и свойства).

  4. ActiveX контроли • ActivеX контролите могат да са както видими (поддържат свой прозорец), така и невидими, при което те нямат свой прозорец – рисуват се в прозореца на контейнера.

  5. ActiveX контроли • Контролът може да е активен (с или без прозорец) или неактивен. Тогава контейнерът го изобразява в своя прозорец от изображение, взето от метафайл. Така се спестява ресурс. ActiveX контролът се активира при кликване с бутона на мишката върху неговия образ. За целта се използва интерфейсът IPointerInactive на контрола, който следи движенията на мишката.

  6. ActiveX контроли • Най-често контролите се реализират като in-processсървъри (т.е те са в DLL). • Някои от интерфейси, които контролите имплементират нямат реализиран marshalling механизъм за настройка при междупроцесен обмен. Реализацията на такъв е доста обемна задача. • По-бърза реакция отколкото при реализация в EXE сървър. • В миналото OLE контролите бяха само in-process.

  7. IOleObject IOleControl IOleInPlaceActiveObject IOleInPlaceActiveWindowless IOleCache IViewObjectEx IDataObject IPersistMemory IQuickActivate IPersistPropertyBag IPersistStorage IPersistStreamInit IPersistStreamInit IDispatch IProvideClassInfo2 ISpecifyPropertyPages IPerPropertyBrowsing IConnectionPointConainer OCX контрол Интерфейси на ActivеX контролите

  8. Интерфейси на ActivеX контролите • IConnectionPointContainer - Използва се при нотификационни съобщения • IDataObject - Предоставя за достъп данни от контрола • IDispatch - Поддържа автоматизация. Предоставя по определен начин за достъп методи и данни на контрола. • IOleCache - Управлява кеш памет за обменяните данни. • IOleControl - Базов интерфейс, който прави контрола ActiveX. • IOleInPlaceActiveObject - Позволява in-place aктивиране. • IPerPropertyBrowsing - Позволява контейнер да извлича информация за свойства на контрола, например имената им. • IPersistMemory - Прави данните на контрола персистентни – те могат да се съхраняват и впоследствие да се използват отново.

  9. ActiveX контролите като Connectable обекти • ActiveX контролите комуникират със своите контейнери по дефиниран протокол, чрез специфични интерфейси. • IConnectionPoint – реализиран е в контрола и позволява клиента да заяви желанието си за event notifications. • IConnectionPointContainer - използва се за запитване на обект дали поддържа първия интерфейс. Притежава функции връщащи указател към IConnectionPoint или повече указатели към няколко такива интерфейса (ако има такива реализирани в обекта).

  10. IPropertyNotifySink IConnectionPoint клиент сървър IConnectionPointContainer ActiveX контролите като Connectable обекти • Клиентът, желаещ ползване на определен IConnectionPoint, извиква функцията QueryInterface() за интерфейса IConnectionPointContainer. Ако това е успешно, клиентът подава указател към своя notification sink интерфейс към сървъра чрез IConnectionPoint. Притежавайки този указател, сървърът подава нотификационни съобщения на клиента.

  11. ActiveX контролите като Connectable обекти • Реализацията на тези интерфейси е тежка задача. MFC предоставя подразбираща се имплементация за тях в класовете CConnectionPoint и CConnectionPointContainer. • Механизмът на интерфейсите: • интерфейсът IConnectionPointContainer се използва, за да предостави на контрола IDispatch интерфейсен указател за контейнера. Следователно контейнерът също е Automation обект. • С помощта на този указател контролът извиква методи от контейнера в реакция на свои събития. • От своя страна, за да се информира какви събития може да предизвика контрола, както и за да съберат информация за него, контейнерите могат да ползват методи от интерфейсите IProvideClassInfo2 и ITypeInfo на контрола, даващи достъп до информация за типовете на контрола.

  12. Пропъртита, събития и методи на ActiveX контрола • Взаимодействие с контролите става чрез пропърти (атрибути), методи (експонирани функции, които могат да се приложат към контрола чрез интерфейса IDispatch) и събития (съобщения, предавани към контейнера от контрола, както беше описано по-горе).

  13. Атрибути (Properties) • ActiveX контролите имплементират свойства, с което позволяват да бъдат модифицирани в зависимост от нуждите на дадено приложение. • Видове свойства: • управляващи средата за съвпадане с поведението на клиента - например цвят на фона, шрифт, и др. • разширени – реализират се в клиента, но се ползват и от контрола. Например подредба на бутони в OLE контрола, съобразно настройки в клиента. • стандартни - те се придават на контрола, но се реализират от ActiveX Development Kit. • потребителски. • И за стандартните и за потребителските свойства е необходимо да се знаят имената и DISPID (dispatch) идентификаторите, определени в спецификацията на контрола.

  14. Методи (Metods) • Методите са функции, реализирани точно така, както и в OLE Automation при използване на интерфейса IDispatch. Те могат да бъдат извиквани за изпълнение на някаква полезна работа. • Методите могат да се разделят на потребитески и стандартни.

  15. Събития (Еvents) • ActiveX контролът поддържа и събитийно множество. Събитията се използват за изпращане на нотификационни съобщения от контрола към контейнера, който съдържа контрола - например кликване с мишка. • Видове събития: • стандартни – реализирани са от развойната среда и се извикват подобно на стандартните функции, например генериране съобщение при грешка - FireError(). • потребителски – за дефинирането им са предвидени облекчаващи средства в средата. За тях, както в автоматизацията, трябва да използваме за повикване име и dispatch идентификатор.

  16. Амбиентни свойства • Свойства, които контейнерът предоставя за проверка или настройка на контрола. • Пример: контролът може да се настрои да изглежда като използващия го в момента контейнер (например цвят на фонa).

  17. Амбиентни свойства • Принцип на реализация: ползване на автоматизацията (амбиентното свойство е automation свойство), и посредничеството на интерфейса Idispatch, реализиран в контейнера. • Амбиентните свойства са точно специфицирани в стандарта като имена и dispatch идентификатори.

  18. Амбиентни свойства • COleControl опростява извличането на амбиентни свойства, като реализира обвиващи функции, които извикват функцията IDispatch::Invoke(). • Видове свойства:

  19. Амбиентни свойства • Амбиентно свойство, за което липсва специална функция, може да се прочете с помощта на функцията GetAmbientProperty() с подаден dispаtch идентификатор на свойството. • Ако някое амбиентно свойство се промени в контейнера, то за това следва да се уведоми контролът.

  20. Амбиентни свойства • Това става в предефинираната функция COleControl::OnAmbientPropertyChange() в класа на контрола. Тя се извиква, когато контейнерът трябва да уведоми контрола, че някое амбиентно свойство се е променило. Като параметър на повикването се подава dispаtch идентификатор на амбиентното свойство. В кода на тази функция контролът трябва да реализира реакцията си. Най-често тя се свежда до прерисуване на контрола (прави се обръщение към метода InvalidateControl()).

  21. IOleContainer IOleInPlaceFrame IOleClientSite IOleControlSite IDispatch IDispatch IPropertyNotifySink Контейнер приемник на събития Контейнери на ActiveX контроли • Контейнерът е COM обект. Това се налага поради необходимостта да се комуникира с контрола, което може да стане с посредничеството на интерфейси.

  22. Контейнери на ActiveX контроли • IOleInPlaceFrame - Използва се за in-place активиране. • IPropertyNotifySink - Използва се при нотификационни съобщения от контрола към контейнера. • IDispatch - Предоставя амбиентните свойства на контейнера. • IDdispatch - Използва се за отработване на събития (еvents) от контейнера. • IOleControlSite - Базов интерфейс на сайт с ActiveX контрол.

  23. Архитектура

  24. Други ActiveX технологии • ActiveX Data Objects (ADO) • Active Server Pages • ActiveMovie >>>>> DirectShow • Active Messaging >>>>> Collaboration Data Objects • Active Scripting • ActiveX Streaming Format (ASF)

  25. Пример .NET Ще разгледаме пример за създаване на ActiveX control, който използваме в html страница. Ще демонстрираме как чрез Java Script се предават параметри на ActiveX от html контроли.

More Related