利用Delphi的ActiveForm,可以很方便地開發出可以嵌入IE的ActiveX組件,無需知道太多幕後的COM知識。如何使得OCX可以很方便地調用Web上的JavaScript函數呢,研究了一個下午,使用ActvieForm的Events介面搞定。說穿了不值錢,只要一句代碼就搞定,但是Google半天,琢磨了N久,看來還是基本功不紮實。
首先在ActiveForm的項目中找到ridl檔案,開啟它,選擇ActiveForm的Events介面,點擊右鍵,建立一個新的方法,方法名為我需要調用javascript的函數名。這裡我要調用一個js的上傳圖片指令碼,所以將其命名為“OnUploadPic”。得到這個事件的ID,這裡是209。
來到xxx_TLB.pas檔案中(xxx為你的項目名),在ActiveForm中Events介面中將這個OnUploadPic方法的聲明加進去。procedure OnUploadPic; dispid 209;
然後HTML頁面中建立這個事件函數,注意event欄位寫入事件名,for欄位寫入你給OCX取的名字,也就<object>把OCX包進去的時候取的name值:
<script language="javascript" event="OnUploadPic" for="OcxName"><br /> alert("hello Delphi!");</p><p> </script> </p><p>
然後在Delphi中需要調用這個函數的地方,加入代碼:
if FEvents <> nil then FEvents.OnUploadPic;
=========================================================================================
以上摘自http://www.acwind.net/blog/?p=658
但是如果不注意js部分,會出現FEvents=nil的問題
注意:
<OBJECT id="testid"<br /> classid="clsid:62949CA7-D723-4D98-AD9A-0DFEBCE5C14F"<br /> codebase="http://LENOVO-NB/ActiveFormProj1.ocx#version=1,0,0,0"<br /> width=350<br /> height=250<br /> align=center<br /> hspace=0<br /> vspace=0<br />><br /></OBJECT><br /><script language="javascript" event="OnUploadPic" for="testid"><br /> alert("Hello Delphi!");<br /></script><br />
for="testid",for要用Object對象中的id,不能用ocx名稱ActiveFormProj1,否則就會出現FEvents=nil。