3

FillForm メソッドを介してチェックボックスの値を設定するにはどうすればよいですか? 私はこれらを試しましたが、動作しません:

  W.FillForm('Chkname', 'True');
  W.FillForm('Chkname', '1');
  W.FillForm('Chkname', '', 1);
4

1 に答える 1

3

TEmbeddedWBかなり遅くなりましたが、これは良い質問であり、の現在のバージョンでさえこの機能が実装されていないため、これに答えようとします。

ただし、これを行うための独自の関数を追加できます。次の例では、チェック ボックスとラジオ ボタンの入力をサポートするバージョンで関数TEmbeddedWBをオーバーロードした場所の介在クラスを使用しています。FillForm

チェック ボックスを設定したり、ラジオ ボタンを選択したりする場合は、このバージョンの関数を呼び出します。

  • FieldName (文字列) - 要素の名前です
  • 値 (文字列) - 要素の値 (空にすることもできますが、その場合は FieldName の最初の要素が設定されます。Web 開発者は名前と値のペアを使用する必要があります)
  • Select (ブール値) - True の場合、チェック ボックスがオンになっているか、ラジオ ボタンが選択されています。

コードは次のとおりです。

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;

そして、ここに使用の基本的な例があります:

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;
于 2012-02-24T01:28:44.667 に答える