要給 Windows® 腳本部件來(lái)添加事件能力:
有些主機(jī)環(huán)境還會(huì)要求您生成一個(gè)類(lèi)型庫(kù),主機(jī)需要這個(gè)類(lèi)型庫(kù)來(lái)綁定事件。詳細(xì)信息請(qǐng)參閱創(chuàng)建腳本部件類(lèi)型庫(kù)。
注意 Behavior 處理程序以一種略微不同的方式來(lái)說(shuō)明事件。詳細(xì)信息請(qǐng)參閱在 Behavior 腳本部件中說(shuō)明自定義事件。
必須逐個(gè)地聲明每個(gè)希望能夠激活的事件。
要聲明一個(gè)事件
<public> <property name="sname"/> <method name="factorial"/> <event name="namechanged"/> <event name="querydone"/> </public>
COM 編程通過(guò)派遣標(biāo)識(shí)符(稱(chēng)為 dispid ) 來(lái)提供事件通知,派遣標(biāo)識(shí)符是指標(biāo)識(shí)部件事件的整數(shù)值。dispid 在編譯時(shí)被寫(xiě)入該部件的類(lèi)型庫(kù),然后由宿主應(yīng)用程序用來(lái)綁定到事件。
給腳本部件創(chuàng)建類(lèi)型庫(kù)的過(guò)程將自動(dòng)為腳本部件的事件生成 dispid 。不過(guò),如果您愿意,您可以指定自己的 dispid 。這樣做的好處是:
要給事件指定一個(gè) dispid,請(qǐng)?jiān)?<event> 元素中包括該 dispid 屬性,如下例所示:
<public> <event name="namechanged" dispid="22"> </public>
Dispid 在腳本部件內(nèi)必須是唯一的。您可以將一個(gè)為負(fù)數(shù)指定為 dispid,并映射到傳統(tǒng)的事件,但必須使用指定的范圍(如 -999 到 -500)加以控制。關(guān)于保留的 dispid 的范圍的詳細(xì)信息,請(qǐng)參閱 MSDN 庫(kù)中的 DISPID 的文檔。
注意 0 這個(gè) dispid 號(hào)碼用來(lái)標(biāo)識(shí)缺省的方法或?qū)傩浴T敿?xì)信息請(qǐng)參閱說(shuō)明方法和說(shuō)明屬性。
可以通過(guò)調(diào)用 fireEvent 方法并指定要激活的事件名來(lái)激活一個(gè)事件。不能激活沒(méi)有在 <implements> ; 元素中聲明的事件?梢约せ钅_本部件文件任何腳本中的事件。例如,下面演示了在屬性值更改時(shí)如何激活事件。
<script language="VBScript"> <![CDATA[ Sub put_lowercaseName(newLCName) name = newLCName fireEvent("namechanged") End Sub ]]> </script>
在 Behavior 腳本部件中說(shuō)明自定義事件 | 說(shuō)明方法 | 說(shuō)明屬性 | 在宿主應(yīng)用程序中處理腳本部件的事件 | 腳本部件文件的內(nèi)容