ActiveX

26
ActiveX ActiveX

description

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

Transcript of ActiveX

ActiveXActiveX

ActiveX контролиActiveX контроли

ActiveXActiveX контролите са най-популярната контролите са най-популярната за момента част от за момента част от ActiveXActiveX технологията. Освен тях се използват:технологията. Освен тях се използват:ActiveX Data ObjectActiveX Data Object ( (ADOADO) ) Active Server PagesActive Server Pages ( (ASPASP) )

Те са Те са COMCOM базирани и следователно се базирани и следователно се подчиняват на правилата и подчиняват на правилата и концепциите в концепциите в COMCOM модела. модела.

ActiveX контролиActiveX контроли ActiveXActiveX контрол - функционално завършено парче контрол - функционално завършено парче

код, пакетирано за многократно използване и код, пакетирано за многократно използване и предоставящо определен интерфейс за предоставящо определен интерфейс за взаимодействие с клиентите си. взаимодействие с клиентите си.

ActiveX контролът е COM обект, но задължен да ActiveX контролът е COM обект, но задължен да имплементира определени интерфейси, които го имплементира определени интерфейси, които го карат да се държи като контрол. карат да се държи като контрол.

ActivActivееXX контролите задължително имплементират контролите задължително имплементират само интерфейса само интерфейса IUnknownIUnknown. .

Повечето контроли имплементират интерфейса Повечето контроли имплементират интерфейса IDispatch, което ги прави Automation сървъри IDispatch, което ги прави Automation сървъри (експонират методи и свойства). (експонират методи и свойства).

ActiveX контролиActiveX контроли

ActivActivееXX контролите могат да са както контролите могат да са както видими (поддържат свой прозорец), видими (поддържат свой прозорец), така и невидими, при което те нямат така и невидими, при което те нямат свой прозорец – рисуват се в прозореца свой прозорец – рисуват се в прозореца на контейнера. на контейнера.

ActiveX контролиActiveX контроли

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

ActiveX контролиActiveX контроли

Най-често контролите се реализират като Най-често контролите се реализират като inin--processprocess сървъри (т.е те са в сървъри (т.е те са в DLLDLL). ). Някои от интерфейси, които контролите Някои от интерфейси, които контролите

имплементират нямат реализиран имплементират нямат реализиран marshalling marshalling механизъм за настройка при механизъм за настройка при междупроцесен обмен. Реализацията на такъв е междупроцесен обмен. Реализацията на такъв е доста обемна задача.доста обемна задача.

По-бърза реакция отколкото при реализация в По-бърза реакция отколкото при реализация в EXEEXE сървър. сървър.

В миналото В миналото OLEOLE контролите бяха само контролите бяха само inin--processprocess. .

Интерфейси на ActivеX Интерфейси на ActivеX контролитеконтролите

OCXконтрол

IOleObjectIOleControlIOleInPlaceActiveObjectIOleInPlaceActiveWindowlessIOleCacheIViewObjectExIDataObjectIPersistMemoryIQuickActivateIPersistPropertyBagIPersistStorageIPersistStreamInitIPersistStreamInitIDispatchIProvideClassInfo2ISpecifyPropertyPagesIPerPropertyBrowsingIConnectionPointConainer

Интерфейси на ActivеX Интерфейси на ActivеX контролитеконтролите

IConnectionPointContainerIConnectionPointContainer - - Използва се при нотификационни Използва се при нотификационни съобщениясъобщения

IDataObjectIDataObject - Предоставя за достъп данни от контрола - Предоставя за достъп данни от контрола IDispatchIDispatch - Поддържа автоматизация. Предоставя по определен - Поддържа автоматизация. Предоставя по определен

начин за достъп методи и данни на контрола.начин за достъп методи и данни на контрола. IOleCacheIOleCache - Управлява кеш памет за обменяните данни. - Управлява кеш памет за обменяните данни. IOleControlIOleControl - Базов интерфейс, който прави контрола - Базов интерфейс, който прави контрола ActiveX.ActiveX. IOleInPlaceActiveObjectIOleInPlaceActiveObject - Позволява - Позволява in-place ain-place aктивиране.ктивиране. IPerPropertyBrowsingIPerPropertyBrowsing - Позволява контейнер да извлича - Позволява контейнер да извлича

информация за свойства на контрола, например имената им.информация за свойства на контрола, например имената им. IPersistMemoryIPersistMemory - Прави данните на контрола персистентни – те - Прави данните на контрола персистентни – те

могат да се съхраняват и впоследствие да се използват отново.могат да се съхраняват и впоследствие да се използват отново.

ActiveX контролите като ActiveX контролите като Connectable обектиConnectable обекти

ActiveXActiveX контролите комуникират със своите контролите комуникират със своите контейнери по дефиниран протокол, чрез контейнери по дефиниран протокол, чрез специфични интерфейси. специфични интерфейси. IConnectionPointIConnectionPoint – реализиран е в контрола и – реализиран е в контрола и

позволява клиента да заяви желанието си за позволява клиента да заяви желанието си за event event notificationsnotifications..

IConnectionPointContainerIConnectionPointContainer - използва се за - използва се за запитване на обект дали поддържа първия запитване на обект дали поддържа първия интерфейс. Притежава функции връщащи интерфейс. Притежава функции връщащи указател към указател към IConnectionPointIConnectionPoint или повече или повече указатели към няколко такива интерфейса (ако указатели към няколко такива интерфейса (ако има такива реализирани в обекта).има такива реализирани в обекта).

ActiveX контролите като ActiveX контролите като Connectable обектиConnectable обекти

Клиентът, желаещ ползване на определен Клиентът, желаещ ползване на определен IConnectionPointIConnectionPoint, , извиква функцията извиква функцията QueryInterfaceQueryInterface()() за интерфейса за интерфейса IConnectionPointContainerIConnectionPointContainer. Ако това е успешно, клиентът подава . Ако това е успешно, клиентът подава указател към своя указател към своя notification sinknotification sink интерфейс към сървъра чрез интерфейс към сървъра чрез IConnectionPointIConnectionPoint. Притежавайки този указател, сървърът подава . Притежавайки този указател, сървърът подава нотификационни съобщения на клиента.нотификационни съобщения на клиента.

IPropertyNotifySink IConnectionPoint

сървърклиент

IConnectionPointContainer

ActiveX контролите като ActiveX контролите като Connectable обектиConnectable обекти

Реализацията на тези интерфейси е тежка задача. Реализацията на тези интерфейси е тежка задача. MFCMFC предоставя подразбираща се имплементация предоставя подразбираща се имплементация за тях в класовете за тях в класовете CConnectionPointCConnectionPoint и и CConnectionPointContainerCConnectionPointContainer. .

Механизмът на интерфейсите:Механизмът на интерфейсите: интерфейсът интерфейсът IConnectionPointContainerIConnectionPointContainer се използва, за да се използва, за да

предостави на контрола предостави на контрола IDispatchIDispatch интерфейсен указател за интерфейсен указател за контейнера. Следователно контейнерът също е контейнера. Следователно контейнерът също е AutomationAutomation обект. обект.

С помощта на този указател контролът извиква методи от С помощта на този указател контролът извиква методи от контейнера в реакция на свои събития. контейнера в реакция на свои събития.

От своя страна, за да се информира какви събития може да От своя страна, за да се информира какви събития може да предизвика контрола, както и за да съберат информация за предизвика контрола, както и за да съберат информация за него, контейнерите могат да ползват методи от него, контейнерите могат да ползват методи от интерфейсите интерфейсите IProvideClassInfoIProvideClassInfo2 и 2 и ITypeInfoITypeInfo на контрола, на контрола, даващи достъп до информация за типовете на контрола. даващи достъп до информация за типовете на контрола.

Пропъртита, събития и методи на Пропъртита, събития и методи на ActiveX контролаActiveX контрола

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

Атрибути (Атрибути (PropertiesProperties) ) ActiveXActiveX контролите имплементират свойства, с което контролите имплементират свойства, с което

позволяват да бъдат модифицирани в зависимост от нуждите позволяват да бъдат модифицирани в зависимост от нуждите на дадено приложение. на дадено приложение.

Видове свойства:Видове свойства: управляващи средата за съвпадане с поведението на клиента - управляващи средата за съвпадане с поведението на клиента -

например цвят на фона, шрифт, и др.например цвят на фона, шрифт, и др. разширени – реализират се в клиента, но се ползват и от контрола. разширени – реализират се в клиента, но се ползват и от контрола.

Например подредба на бутони в Например подредба на бутони в OLEOLE контрола, съобразно контрола, съобразно настройки в клиента.настройки в клиента.

стандартни - те се придават на контрола, но се реализират от стандартни - те се придават на контрола, но се реализират от ActiveX ActiveX Development KitDevelopment Kit..

потребителски.потребителски. И за стандартните и за потребителските свойства е необходимо И за стандартните и за потребителските свойства е необходимо

да се знаят имената и да се знаят имената и DISPIDDISPID (dispatch) идентификаторите, (dispatch) идентификаторите, определени в спецификацията на контрола. определени в спецификацията на контрола.

Методи (Методи (MetodsMetods) )

Методите са функции, реализирани Методите са функции, реализирани точно така, както и в точно така, както и в OLE AutomationOLE Automation при използване на интерфейса при използване на интерфейса IDispatchIDispatch. Те могат да бъдат извиквани . Те могат да бъдат извиквани за изпълнение на някаква полезна за изпълнение на някаква полезна работа. работа.

Методите могат да се разделят на Методите могат да се разделят на потребитески и стандартни. потребитески и стандартни.

Събития (ЕСъбития (Еventsvents) ) ActiveXActiveX контролът поддържа и събитийно множество. контролът поддържа и събитийно множество.

Събитията се използват за изпращане на Събитията се използват за изпращане на нотификационни съобщения от контрола към нотификационни съобщения от контрола към контейнера, който съдържа контрола - например контейнера, който съдържа контрола - например кликване с мишка. кликване с мишка.

Видове събития:Видове събития: стандартни – реализирани са от развойната среда и се стандартни – реализирани са от развойната среда и се

извикват подобно на стандартните функции, например извикват подобно на стандартните функции, например генериране съобщение при грешка - FireError().генериране съобщение при грешка - FireError().

потребителски – за дефинирането им са предвидени потребителски – за дефинирането им са предвидени облекчаващи средства в средата. За тях, както в облекчаващи средства в средата. За тях, както в автоматизацията, трябва да използваме за повикване име и автоматизацията, трябва да използваме за повикване име и dispatch идентификатор.dispatch идентификатор.

Амбиентни свойстваАмбиентни свойства

Свойства, които контейнерът Свойства, които контейнерът предоставя за проверка или настройка предоставя за проверка или настройка на контрола. на контрола.

Пример: контролът може да се настрои Пример: контролът може да се настрои да изглежда като използващия го в да изглежда като използващия го в момента контейнер (например цвят на момента контейнер (например цвят на фонфонaa). ).

Амбиентни свойстваАмбиентни свойства

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

Амбиентните свойства са точно Амбиентните свойства са точно специфицирани в стандарта като имена специфицирани в стандарта като имена и dispatch идентификатори. и dispatch идентификатори.

Амбиентни свойстваАмбиентни свойства

COleControlCOleControl опростява извличането на опростява извличането на амбиентни свойства, като реализира амбиентни свойства, като реализира обвиващи функции, които извикват обвиващи функции, които извикват функцията функцията IDispatchIDispatch::::InvokeInvoke()(). .

Видове свойства:Видове свойства:

Амбиентни свойстваАмбиентни свойства

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

Ако някое амбиентно свойство се Ако някое амбиентно свойство се промени в контейнера, то за това промени в контейнера, то за това следва да се уведоми контролът. следва да се уведоми контролът.

Амбиентни свойстваАмбиентни свойства Това става в предефинираната функция Това става в предефинираната функция

COleControlCOleControl::::OnAmbientPropertyChangeOnAmbientPropertyChange()() в в класа на контрола. Тя се извиква, когато класа на контрола. Тя се извиква, когато контейнерът трябва да уведоми контрола, че контейнерът трябва да уведоми контрола, че някое амбиентно свойство се е променило. някое амбиентно свойство се е променило. Като параметър на повикването се подава Като параметър на повикването се подава dispdispааtchtch идентификатор на амбиентното идентификатор на амбиентното свойство. В кода на тази функция контролът свойство. В кода на тази функция контролът трябва да реализира реакцията си. Най-често трябва да реализира реакцията си. Най-често тя се свежда до прерисуване на контрола тя се свежда до прерисуване на контрола (прави се обръщение към метода (прави се обръщение към метода InvalidateControlInvalidateControl()()).).

Контейнери на ActiveX контролиКонтейнери на ActiveX контроли

Контейнерът е Контейнерът е COMCOM обект. Това се налага обект. Това се налага поради необходимостта да се комуникира с поради необходимостта да се комуникира с контрола, което може да стане с контрола, което може да стане с посредничеството на интерфейси. посредничеството на интерфейси.

Контейнерприемник

на събития

IOleContainerIOleInPlaceFrameIOleClientSiteIOleControlSiteIDispatchIDispatchIPropertyNotifySink

Контейнери на ActiveX контролиКонтейнери на ActiveX контроли

IOleInPlaceFrameIOleInPlaceFrame - Използва се за - Използва се за inin--placeplace активиране.активиране.

IPropertyNotifySinkIPropertyNotifySink - Използва се при - Използва се при нотификационни съобщения от контрола към нотификационни съобщения от контрола към контейнера.контейнера.

IDispatchIDispatch - Предоставя амбиентните свойства - Предоставя амбиентните свойства на контейнера.на контейнера.

IDdispatchIDdispatch - Използва се за отработване на - Използва се за отработване на събития (събития (еvents)еvents) от контейнера. от контейнера.

IOleControlSiteIOleControlSite - Базов интерфейс на сайт с - Базов интерфейс на сайт с ActiveXActiveX контрол. контрол.

Архитектура

Други Други ActiveX ActiveX технологии технологии

ActiveX Data Objects (ADO) ActiveX Data Objects (ADO) Active Server Pages Active Server Pages ActiveMovie >>>>> DirectShow ActiveMovie >>>>> DirectShow Active Messaging >>>>> Collaboration Active Messaging >>>>> Collaboration

Data Objects Data Objects Active ScriptingActive ScriptingActiveX Streaming Format (ASF)ActiveX Streaming Format (ASF)

Пример .Пример .NETNET

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