Выполняет связывание (соединение) Событий объекта COM server с соответствующими (исполняющими) методами специального объекта Visual FoxPro.

Дополнительную информацию о механизмах Связывания событий внешних объектов с внутренними объектами Visual FoxPro смотрите в разделе: Связывание Событий для объектов Visual FoxPro.

EVENTHANDLER(oCOMObject, oVFPObject [, lUnbind])

Параметры

oCOMObject

Определяет объектную ссылку на внешний объект COM-Server, события которого будут контролироваться (будут привязаны). oCOMObject должен быть допустимым объектом COM.

oVFPObject

Определяет объектную ссылку на существующий объект Visual FoxPro, содержащий соответствующие пользовательские методы обработки требуемых событий внешнего объекта COM. Данный класс объекта должен иметь соответствующую характеристику Implement the events Interface, (смотрите пример ниже: ...DEFINE CLASS...IMPLEMENTS RecordSetEvents...) для привязки к объекту COM, ссылка которого указана в первом аргументе. Например, как показано ниже, для существующего интерфейса RecordsetEvents внешнего объекта ADO Recordset создается собственный обработчик Событий MyClass (VFP).

lUnbind

Система Visual FoxPro автоматически Развязывает соответствующие объекты (аргументы 1 и 2) при их разрушении (уничтожении или стирании). Если данный параметр указан, и имеет значение = .T., то созданное ранее Соединение между указанными объектами закрывается, объекты развязываются, однако остаются актовными, но уже независимыми....

Expand imageВозвращаемое значение

Логического типа (Logical). EVENTHANDLER( ) возвращает значение =  True (.T.) если соединение выполнено, в противном случае возвращается значение = False (.F.).

Expand imageКомментарии

Вы можете соединить (связать) один объект COM с несколькими соответствующими объектами Visual FoxPro, или наоборот, вы можете соединить (связать) несколько объектов COM с одним соответствующим объектом Visual FoxPro.

Созданный Обработчик Событий автоматически закрывается когда один из связанныхт объектов: или соответствующий объект Visual FoxPro или объект COM закрываются (выгружаются из памяти). Вы можете также непосредственно выполнить данную функцию EVENTHANDLER( ), указав последний (3-й) параметр lUnbind = True (.T.), что развязывает данные объекты, однако объекты остаются активными в Приложении.

Expand imageПример

 CopyCode imageКопировать Код
LOCAL oEvents
LOCAL oRS AS adodb.recordset
LOCAL oConn AS adodb.Connection

oEvents = NEWOBJECT("myclass")
oConn = NEWOBJECT("adodb.connection")

oConn.Provider="MSDASQL"
* Make sure to set the SourceDB property
* below to your TESTDATA location.
oConn.ConnectionString="DSN=Visual FoxPro Database;" + ;
"SourceType=DBC; SourceDB=D:\VFP\DATA\TESTDATA.DBC"
oConn.Open
oRS = oConn.Execute("select * from customer")
? EVENTHANDLER(oRS, oEvents)
?
? PADR(oRS.Fields(0).Value,20)
? EVENTHANDLER (oRS, oEvents, .T.)
oRS.MoveNext
? PADR(oRS.Fields(0).Value,20)
oRS.MoveNext
CLEAR all
RETURN

DEFINE CLASS myclass AS session
IMPLEMENTS RecordsetEvents IN "adodb.recordset"

PROCEDURE Recordsetevents_WillChangeField(cFields AS Number @, Fields AS VARIANT @, adStatus AS VARIANT @, pRecordset AS VARIANT @) AS VARIANT
? " "+program() + ' ' + TRANSFORM(DATETIME())

PROCEDURE Recordsetevents_FieldChangeComplete(cFields AS Number @, Fields AS VARIANT @, pError AS VARIANT @, adStatus AS VARIANT @, pRecordset AS VARIANT @) AS VARIANT
? " "+program() + ' ' + TRANSFORM(DATETIME())

PROCEDURE Recordsetevents_WillChangeRecord(adReason AS VARIANT @, cRecords AS Number @, adStatus AS VARIANT @, pRecordset AS VARIANT @) AS VARIANT
? " "+program() + ' ' + TRANSFORM(DATETIME())

PROCEDURE Recordsetevents_RecordChangeComplete(adReason AS VARIANT @, cRecords AS Number @, pError AS VARIANT @, adStatus AS VARIANT @, pRecordset AS VARIANT @) AS VARIANT
? " "+program() + ' ' + TRANSFORM(DATETIME())

PROCEDURE Recordsetevents_WillChangeRecordset(adReason AS VARIANT @, adStatus AS VARIANT @, pRecordset AS VARIANT @) AS VARIANT
? " "+program() + ' ' + TRANSFORM(DATETIME())
?adreason,adstatus,precordset.recordcount

PROCEDURE Recordsetevents_RecordsetChangeComplete(adReason AS VARIANT @, pError AS VARIANT @, adStatus AS VARIANT @, pRecordset AS VARIANT @) AS VARIANT
? " "+program() + ' ' + TRANSFORM(DATETIME())

PROCEDURE Recordsetevents_WillMove(adReason AS VARIANT @, adStatus AS VARIANT @, pRecordset AS VARIANT @) AS VARIANT
? " "+program() + ' ' + TRANSFORM(DATETIME())

PROCEDURE Recordsetevents_MoveComplete(adReason AS VARIANT @, pError AS VARIANT @, adStatus AS VARIANT @, pRecordset AS VARIANT @) AS VARIANT
? " "+program() + ' ' + TRANSFORM(DATETIME())

PROCEDURE Recordsetevents_EndOfRecordset(fMoreData AS LOGICAL @, adStatus AS VARIANT @, pRecordset AS VARIANT @) AS VARIANT
? " "+program() + ' ' + TRANSFORM(DATETIME())

PROCEDURE Recordsetevents_FetchProgress(Progress AS Number @, MaxProgress AS Number @, adStatus AS VARIANT @, pRecordset AS VARIANT @) AS VARIANT
? " "+program() + ' ' + TRANSFORM(DATETIME())

PROCEDURE Recordsetevents_FetchComplete(pError AS VARIANT @, adStatus AS VARIANT @, pRecordset AS VARIANT @) AS VARIANT
? " "+program() + ' ' + TRANSFORM(DATETIME())

ENDDEFINE

Expand imageСм. также