2011-05-13 74 views
1

Possible Duplicate:
How to call the OnChange event of 「Select」 ? (Delphi - WebBrowser)德爾福 - 在一個網頁瀏覽器

嗨運行JavaScript,

我加載一個網頁到Twebrowser在德爾福,網頁有一個下拉的形式。我可以讓我的程序在下拉菜單中選擇項目ID,但選擇選項有一個onchange事件,我如何在不使用execScript('yourfunctioname()','JavaScript')的情況下在delphi 中激發onchange事件;

繼承人的選擇與onChnage事件

<select align="left" id="carrierNameDropDown_UNSHIPPEDITEMS" onChange="MYO.ES.OtherCarrierToggle (this, 'UNSHIPPEDITEMS')"> 
      <option value="0" selected="1" >Select</option> 
       <option value="Chronopost" >Chronopost</option> 
       <option value="City Link" >City Link</option> 
       <option value="DHL" >DHL</option> 
       <option value="DPD" >DPD</option> 
       <option value="Deutsche Post" >Deutsche Post</option> 
       <option value="Fastway" >Fastway</option> 
       <option value="FedEx" >FedEx</option> 
       <option value="GLS" >GLS</option> 
       <option value="GO!" >GO!</option> 
       <option value="Hermes Logistik Gruppe" >Hermes Logistik Gruppe</option> 
       <option value="La Poste" >La Poste</option> 
       <option value="Parcelforce" >Parcelforce</option> 
       <option value="Parcelnet" >Parcelnet</option> 
       <option value="Poste Italiane" >Poste Italiane</option> 
       <option value="Royal Mail" >Royal Mail</option> 
       <option value="SDA" >SDA</option> 
       <option value="Smartmail" >Smartmail</option> 
       <option value="TNT" >TNT</option> 
       <option value="Target" >Target</option> 
       <option value="UPS" >UPS</option> 
       <option value="Yodel" >Yodel</option> 

      <option value="Other"> 
       Specify carrier: 
      </option> 
     </select> 

我把它做的工作:

if EmbeddedWB1.Document <> nil then begin 
if EmbeddedWB1.Document.QueryInterface(IHTMLDocument3,docb) = S_OK then begin 
elb := docb.getElementById('carrierNameDropDown_UNSHIPPEDITEMS'); 
if elb <> nil then begin 
(elb as IHTMLSelectElement).value := 'Parcelforce'; 
OleVariant (elb as IHTMLElement). FireEvent ('onchange'); 
end; 
+0

謝謝伊恩!雖然我嘗試了,並不斷收到錯誤:德爾福無法完成操作,由於錯誤80020101 :( – Stu 2011-05-13 13:30:26

+0

我想我可能能夠使用FireEvent(「onchange」),但我不知道如何使用它...仍然期待... – Stu 2011-05-13 14:24:51

+0

我認爲它是這樣的東西,但沒有人知道如何使用它?OleVariant(yourIHTMLElement).FireEvent('onchange'); – Stu 2011-05-13 14:34:37

回答

1

這將工作:

uses 
    MSHTML; 

procedure TBrowserPageIE.Test; 
var 
    doc : IHTMLDocument3; 
    el : IHTMLElement; 
    v : OleVariant; 
begin 
    if FBrowser.Document <> nil then begin 
    if FBrowser.Document.QueryInterface(IHTMLDocument3,doc) = S_OK then begin 
     el := doc.getElementById('carrierNameDropDown_UNSHIPPEDITEMS'); 

     if el <> nil then begin 
     (el as IHTMLSelectElement).value := 'UPS'; 
     (el as IHTMLElement3).FireEvent('onchange', v); 
     end; 
    end; 
    end; 
end; 

,這與後期綁定

procedure TBrowserPageIE.Test; 
var 
    doc : IHTMLDocument3; 
    el : OleVariant; 
    v : OleVariant; 
begin 
    if FBrowser.Document <> nil then begin 
    if FBrowser.Document.QueryInterface(IHTMLDocument3,doc) = S_OK then begin 
     el := doc.getElementById('carrierNameDropDown_UNSHIPPEDITEMS'); 
     el.value := 'UPS'; 
     el.FireEvent('onchange', v); 
    end; 
    end; 
end; 
+0

嘿馬賽亞,我試過了,但它回來與未聲明的標識符:'IHTMLElement3'什麼是我做錯了嗎? – Stu 2011-05-13 15:29:01

+0

MSHTML在你的用途列表中嗎? – 2011-05-13 16:05:17

+0

是的它在那裏:/ – Stu 2011-05-16 08:19:10