2010-08-19 4 views
3

Comment puis-je définir une valeur pour une case à cocher via la méthode FillForm? J'ai essayé ces derniers mais ne fonctionne pas:Comment définir la valeur de checkbox via EmbeddedWB.FillForm? (Delphi)

W.FillForm('Chkname', 'True'); 
    W.FillForm('Chkname', '1'); 
    W.FillForm('Chkname', '', 1); 
+0

D'où vient votre 'FillForm' vient? Je ne me souviens pas de cela comme une caractéristique Delphi standard. Dans quelle unité/bibliothèque add-on? –

+0

Embedded Webbrowser: http://www.bsalsa.com – Kermia

Répondre

3

assez tard, je sais, mais je vais essayer de répondre à cette question car il est une bonne question et puisque même la version actuelle du TEmbeddedWB ne pas avoir cette fonctionnalité mise en œuvre.

Cependant, vous pouvez ajouter votre propre fonction pour ce faire; Dans l'exemple suivant j'utilise la classe interposée de TEmbeddedWB où j'ai surchargé la fonction FillForm avec la version qui supporte la case à cocher et le remplissage des boutons radio.

Si vous souhaitez définir la case à cocher ou sélectionnez une appel bouton radio cette version de la fonction, où:

  • FieldName (string) - est le nom de l'élément
  • Value (string) - valeur de l'élément (peut être vide, mais dans ce cas, le premier élément du FieldName sera défini, les développeurs web doivent utiliser des paires de noms IMHO)
  • Select (Boolean) - si True, case à cocher est cochée ou radio bouton sélectionné

Voici le code:

uses 
    EmbeddedWB, MSHTML; 

type 
    TEmbeddedWB = class(EmbeddedWB.TEmbeddedWB) 
    public 
    function FillForm(const FieldName, Value: string; 
     Select: Boolean): Boolean; overload; 
    end; 

implementation 

function TEmbeddedWB.FillForm(const FieldName, Value: string; 
    Select: Boolean): Boolean; 
var 
    I: Integer; 
    Element: IHTMLElement; 
    InputElement: IHTMLInputElement; 
    ElementCollection: IHTMLElementCollection; 
begin 
    Result := False; 
    ElementCollection := (Document as IHTMLDocument3).getElementsByName(FieldName); 
    if Assigned(ElementCollection) then 
    for I := 0 to ElementCollection.length - 1 do 
    begin 
     Element := ElementCollection.item(I, '') as IHTMLElement; 
     if Assigned(Element) then 
     begin 
     if UpperCase(Element.tagName) = 'INPUT' then 
     begin 
      InputElement := (Element as IHTMLInputElement); 
      if ((InputElement.type_ = 'checkbox') or (InputElement.type_ = 'radio')) and 
      ((Value = '') or (InputElement.value = Value)) then 
      begin 
      Result := True; 
      InputElement.checked := Select; 
      Break; 
      end; 
     end; 
     end; 
    end; 
end; 

Et voici un exemple d'utilisation basique:

procedure TForm1.Button1Click(Sender: TObject); 
var 
    WebBrowser: TEmbeddedWB; 
begin 
    WebBrowser := TEmbeddedWB.Create(Self); 
    WebBrowser.Parent := Self; 
    WebBrowser.Align := alClient; 
    WebBrowser.Navigate('http://www.w3schools.com/html/html_forms.asp'); 

    if WebBrowser.WaitWhileBusy(15000) then 
    begin 
    if not WebBrowser.FillForm('sex', 'male', True) then 
     ShowMessage('Error while form filling occured...'); 
    if not WebBrowser.FillForm('vehicle', 'Bike', True) then 
     ShowMessage('Error while form filling occured...'); 
    if not WebBrowser.FillForm('vehicle', 'Car', True) then 
     ShowMessage('Error while form filling occured...'); 
    end; 
end; 
+0

Le point principal de ce post est que vous ne pouvez pas utiliser le TEmbeddedWB.FillForm tel qu'il est, car il définit l'attribut 'value' de l'élément que vous ne devrait pas faire puisque les éléments comme les cases à cocher et les boutons radio ont la valeur utilisée pour construire les paires de valeurs de nom lors de l'envoi du formulaire. – TLama

Questions connexes