Delphi 如何通过EmbeddedWB.FillForm设置复选框的值?(德尔菲)

Delphi 如何通过EmbeddedWB.FillForm设置复选框的值?(德尔菲),delphi,tcheckbox,Delphi,Tcheckbox,如何通过FillForm方法设置复选框的值? 我试过这些,但不起作用: W.FillForm('Chkname', 'True'); W.FillForm('Chkname', '1'); W.FillForm('Chkname', '', 1); 很晚了,我知道,但我会尝试回答这个问题,因为这是一个好问题,而且即使是当前版本的也没有实现此功能 但是,您可以为此添加自己的函数;在下面的示例中,我使用插入类,其中我重载了FillForm函数,该函数的版本支持复选框和单选按钮填充 如果

如何通过FillForm方法设置复选框的值? 我试过这些,但不起作用:

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

很晚了,我知道,但我会尝试回答这个问题,因为这是一个好问题,而且即使是当前版本的也没有实现此功能

但是,您可以为此添加自己的函数;在下面的示例中,我使用插入类,其中我重载了
FillForm
函数,该函数的版本支持复选框和单选按钮填充

如果要设置复选框或选择某个单选按钮,请调用此版本的函数,其中:

  • FieldName(字符串)-是元素的名称
  • Value(string)-元素的值(可以为空,但在这种情况下,将设置FieldName的第一个元素;web开发人员应使用名称-值对IMHO)
  • 选择(布尔)-如果为真,则选中复选框或单选按钮
代码如下:

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;

您的
FillForm
来自哪里?我不记得这是标准的Delphi特性。它在什么附加单元/库中?嵌入式Webbrowser:这篇文章的要点是你不能按原样使用
TEmbeddedWB.FillForm
,因为它设置了元素的
属性,所以您不应该这样做,因为复选框和单选按钮等元素具有用于在发送表单时构建名称-值对的值。