Mß-li u₧ivatelskß aplikace reagovat na n∞kterou udßlost, je t°eba vytvo°it obslu₧nou rutinu a napojit ji na p°φsluÜnou udßlost. V Microsoft Visual Basicu nebo Borland Delphi se o napojenφ postarß automaticky v²vojovΘ prost°edφ. Pro zvolen² objekt nabφdne seznam udßlostφ, kterΘ jsou k dispozici a po tΘ, co si v²vojß° n∞jakou vybere, vygeneruje v²vojovΘ prost°edφ rßmec obslu₧nΘ rutiny, do kterΘho staΦφ doplnit pouze vlastnφ p°φkazy. V HTML se obslu₧nß rutina napojφ na udßlost pomocφ parametru FOR
a EVENT
v prvku <SCRIPT>
. Nap°φklad oÜet°enφ udßlosti OnNextRecord
(v²pis Φφsla zßznamu (internφho i externφho) na status bar browseru) m∙₧e v JavaScriptu vypadat nap°φklad takto:
<OBJECT
CLASSID="clsid:32F34910-9288-101B-96B8-04021C007002"
ALIGN=CENTER WIDTH=275 HEIGHT=156 BORDER=1 HSPACE=5
ID=Formular>
<SCRIPT FOR=Formular EVENT="OnNextRecord(iRec, eRec, Subf)" LANGUAGE="JavaScript">
window.status = iRec.toString(10) + "/" + eRec.toString(10);
</SCRIPT>
Ve VBScriptu lze vedle tΘto pou₧φt takΘ syntaxi:
<SCRIPT LANGUAGE="VBScript">
Sub Formular_OnNextRecord(iRec, eRec, Subf)
window.Status = Cstr(iRec) + "/" + Cstr(eRec)
end sub
</SCRIPT>
V C++ je t°eba obslu₧nΘ rutiny udßlostφ ôzabalitö do rozhranφ IDispatch
. V inicializaΦnφ Φßsti aplikace se po aktivaci komponenty najde pomocφ metody IconnectionPointContainer::FindConnectionPoint
jejφ styΦn² bod a tomu se p°edß ukazatel na rozhranφ IDispatch
. Udßlosti komponenty 602SQL PohledX majφ ID rovno {32F34913-9288-101B-96B8-04021C007002}
. Inicializace obsluhy udßlostφ m∙₧e vypadat nap°. takto:
DEFINE_GUID(WBFORM_EVENT_ID, 0x32F34913L, 0x9288, 0x101B, 0x96,
0xB8, 0x04, 0x02, 0x1C, 0x00, 0x70, 0x02);
void CWBFormItem :: InitEventHandler()
{
LPCONNECTIONPOINTCONTAINER lpConPtCont = NULL;
if (m_lpObject->QueryInterface(IID_IConnectionPointContainer,
(LPVOID *)&lpConPtCont) != NOERROR)
return;
if (lpConPtCont->FindConnectionPoint(WBFORM_EVENT_ID,
&m_EVConPt) == NOERROR)
m_EVConPt->Advise((LPDISPATCH)this, &m_EVCookie);
if (lpConPtCont)
lpConPtCont->Release();
}
Komponenta pak vyvolßvß jednotlivΘ udßlosti prost°ednictvφm metody IDispatch::Invoke
.
STDMETHODIMP CWBFormItem :: Invoke(DISPID dispid, REFIID riid,
LCID lcid, WORD Flags, DISPPARAMS *Params, VARIANT *pRes,
EXCEPINFO *pexcepinfo, UINT *puArgErr)
{
if (Flags == DISPATCH_METHOD)
{
switch (dispid)
{
case DID_ONNEXTRECORD:
.
.
.
break;
case DID_ONITEMCHANGED:
.
.
.
break;
.
.
.
}
return(NOERROR);
}
V rßmci uvol≥ovßnφ komponenty je t°eba styΦn² bod uvolnit:
void CWBFormItem :: ReleaseEventHandler()
{
if (m_EVConPt)
{
if (m_EVCookie)
m_EVConPt->Unadvise(m_EVCookie);
m_EVConPt->Release();
}
}