2010-09-16 3 views
1

J'utilise des composants Delphi et WebBrowser pour naviguer dans une page html. la page a un Combobox. est-il possible d'appeler l'événement OnChange?Comment appeler l'événement OnChange de "Select"? (Delphi - WebBrowser)

Le ComboBox est comme ceci:

<select name="comboname" onchange="Some Javascript codes"> 

Aussi, je l'ai utilisé ce code:

function TFrmMain.SetComboboxValue(WB: TEmbeddedWB; 
    SelectName, ItemName: string): Boolean; 
var 
    iForms, iFormItems, iSelectItems: Word; 
    FormItem: OleVariant; 
begin 
    Result := false; 
    for iForms := 0 to WB.OleObject.Document.Forms.length - 1 do 
    begin 
    FormItem := WB.OleObject.Document.Forms.item(iForms); 
    for iFormItems := 0 to FormItem.length - 1 do 
    begin 
     if (FormItem.item(iFormItems). type = 'select-one') and SameText 
     (FormItem.item(iFormItems).Name, SelectName) then 
     begin 
     for iSelectItems := 0 to FormItem.item(iFormItems).Options.length - 1 do 
     begin 
      if SameText(FormItem.item(iFormItems).Options.item(iSelectItems) 
       .Text, ItemName) then 
      begin 
      FormItem.item(iFormItems).SelectedIndex := iSelectItems; 
      Result := true; 
      Break; 
      end; 
     end; 
     end; 
    end; 
    end; 
end; 

Mais changer la valeur seulement.

Répondre

4

pour exécuter l'événement onchange vous pouvez utiliser la méthode execScript

vérifier cet échantillon

uses 
    MSHTML; 

var 
    Doc: IHTMLDocument2;  
    HTMLWindow: IHTMLWindow2;   
begin 
    Doc := WebBrowser1.Document as IHTMLDocument2; 
    if not Assigned(Doc) then 
    Exit; 
    HTMLWindow := Doc.parentWindow; 
    if not Assigned(HTMLWindow) then 
    Exit; 

    HTMLWindow.execScript('yourfunctioname()', 'JavaScript'); 
end; 

pour plus d'informations consultez cet excellent article

+0

Merci, beaucoup plus facile? :RÉ – Kermia

0

Inspiré par la réponse. NET ont été en utilisant les structures ci-dessous:

FrameSet Document Elements Item Name Value Change ; 
EWB.OleObject.Document.Frames.Item('mainFrame').Document.Forms.Item('invoiceForm').Elements.Item('inputname').Value:= '123456'; 

ou

FrameSet Document Elements Items Lenth; 

EWB.OleObject.Document.Forms.Item('invoiceForm').Elements.Length; 
Questions connexes