EventHandler( )-Funktion
Bindet ein COM-Serverereignis zur Implementierung von Schnittstellenmethoden an ein Visual FoxPro-Objekt.
EventHandler(oCOMObject, oVFPObject [, lUnbind])
Rückgabewerte
Logisch (.T.) falls erfolgreich.
Parameter
- oCOMObject
Gibt den Objektbezug auf das Objekt an, dessen Ereignisse gebunden werden sollen. - oVFPObject
Gibt den Objektbezug für das Visual FoxPro-Objekt an, das benutzerdefinierten Methodencode enthält, der entsprechenden COM-Objektereignissen zugeordnet wird. Die Klasse muss die Ereignisschnittstelle für das COM-Objekt implementieren, das im ersten Parameter übergeben wird. So müssen Sie z. B. die IRecordsetEvents-Schnittstelle implementieren, um eine Bindung zu einem ADO-Recordset-Objekt herzustellen. - lUnbind
Visual FoxPro beendet automatisch die Ereignisbehandlung, wenn der Gültigkeitsbereich verlassen wird. Durch die Übergabe dieses Parameters können Sie die Ereignisbehandlung beenden, wobei beide Objekte innerhalb des Gültigkeitsbereichs bleiben.
Hinweise
Bei oCOMObject muss es sich um ein gültiges COM-Objekt handeln.
Sie können ein COM-Objekt an mehrere Visual FoxPro-Objekte oder mehrere COM-Objekte an ein Visual FoxPro-Objekt binden.
Die Bindung für die Ereignisbehandlung wird automatisch aufgehoben, wenn entweder das Visual FoxPro- oder das COM-Objekt freigegeben wird. Sie können explizit die EventHandler( )-Funktion aufrufen und den lUnbind-Parameter übergeben, um die Bindung für Objekte aufzuheben, ohne Objektverweise aufzugeben.
Beispiel
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