delphi EmbeddedWB控件的问题!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi EmbeddedWB控件的问题!相关的知识,希望对你有一定的参考价值。

procedure TForm1.Button1Click(Sender: TObject);
begin
embeddedwb1.Navigate('www.baidu.com');
end;

procedure TForm1.EmbeddedWB1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
Memo1.Lines.Add(IhtmlDocument2(embeddedwb1.Document).Body.OuterText);
end;

这样是直接获取到页面的文字到 Memo1里显示

但是我想获取的是源代码,
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Untitled Page</title>
<script type="text/javascript" language="javascript">
function getPage()

var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.Open("GET","http://www.baidu.com",true)
xmlhttp.Onreadychange=statuschange;

向这样的源码应该怎么写!才能获取
解决问题另送100分

Uses
mshtml;

procedure TFormIEBrowse.Button1Click(Sender: TObject);
Var
document: IHTMLDocument2;
begin
document := WebBrowser1.Document as IHTMLDocument2;
Memo1.Lines.Add(IHtmlDocument2(WebBrowser1.Document).Body.OuterHtml);
end;
================================
这样就行了
参考技术A 直接用IDHTTP控件就行了。
memo1.text := idhttp.get('www.baidu.com');

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

【中文标题】如何通过 EmbeddedWB.FillForm 设置复选框的值? (德尔福)【英文标题】:How to set value for checkbox via EmbeddedWB.FillForm ? (Delphi) 【发布时间】:2010-08-19 19:57:51 【问题描述】:

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

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

【问题讨论】:

你的FillForm来自哪里?我不记得这是标准的 Delphi 功能。它在哪个附加单元/库中? 嵌入式网页浏览器:bsalsa.com 【参考方案1】:

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

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

如果你想设置复选框或选择一些单选按钮调用这个版本的函数,其中:

FieldName (string) - 是元素的名称 Value (string) - 元素的值(可以为空,但在这种情况下将设置 FieldName 的第一个元素;Web 开发人员应使用名称值对恕我直言) 选择(布尔) - 如果为 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;

【讨论】:

这篇文章的主要观点是你不能按原样使用TEmbeddedWB.FillForm,因为它设置了元素的value属性你不应该做的事情,因为元素喜欢复选框和单选按钮具有用于在发送表单时构建名称值对的值。

以上是关于delphi EmbeddedWB控件的问题!的主要内容,如果未能解决你的问题,请参考以下文章

本人delphi新手,有个问题还需各位大大们解释下: 不知 EmbeddedWB.Application = pDisp 为何意?

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

我打开有些网页会出现invalid floating point operation 这要怎么解决?

关于delphi7的TcxCheckComboBox控件的问题

delphi的adoconnection控件自动连接问题

delphi中添加frame控件的问题