首页 > Web开发 > 详细

delphi中EmbeddedWB网页html相互调用(二)

时间:2014-01-16 00:08:55      阅读:796      评论:0      收藏:0      [点我收藏+]

我们可以通过控件 EmbeddedWB_D5-D2010_Version_14.69.1 来响应html事件,还可以自定义html响应哪些html元素。

控件下载 点击下载

里面有demos文件夹大家可以看看delphi代码实例。

EmbeddedWB_D5-D2010_Version_14.69.1\Demos\EmbeddedWB Demos\15 - THTMLListener_Demo

关键方法:HtmlListener1HandlersOnClickHandle

这里贴出这个demo的代码

bubuko.com,布布扣
unit uMain;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, Forms,
  Dialogs, EwbBehaviorsComp, EwbEventsComp, EwbEvents, OleCtrls, SHDocVw_EWB, MSHTML_EWB, EwbCore,
  EmbeddedWB, StdCtrls, ComObj, ActiveX, ExtCtrls;



type
  TForm1 = class(TForm)
    EmbeddedWB1: TEmbeddedWB;
    Panel1: TPanel;
    btnEnableDisable: TButton;
    lblClickedOnElement: TLabel;
    lblElementUndertheMouse: TLabel;
    HtmlListener1: THtmlListener;
    procedure HtmlListener1HandlersOnClickHandle(Sender: TObject;
      Event: IHTMLEventObj);
    procedure FormCreate(Sender: TObject);
    procedure HtmlListener1HandlersOnMouseMoveHandle(Sender: TObject;
      Event: IHTMLEventObj);
    procedure EmbeddedWB1DocumentComplete(ASender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    procedure btnEnableDisableClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure EmbeddedWB1BeforeNavigate2(ASender: TObject;
      const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
      Headers: OleVariant; var Cancel: WordBool);
  private
    { Private declarations }
    HubLinksList: TInterfaceList;
    FEventsEnabled: Boolean;
    HubLink: IHubLink;
    procedure DisconnectHtmlListeners;
    procedure ConnectHtmlListeners;
    procedure ConnectHtmlListener(ASender: TObject; Doc: IHTMLDocument2);
  public
    { Public declarations }
  end;


var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FEventsEnabled := True;
  HubLinksList := TInterfaceList.Create;
  EmbeddedWB1.Navigate(www.google.com);
end;

procedure TForm1.HtmlListener1HandlersOnClickHandle(Sender: TObject;
  Event: IHTMLEventObj);
begin
  lblClickedOnElement.Caption := Format(Clicked on Element with Tag: [%s], [Event.srcElement.tagName])
end;

procedure TForm1.HtmlListener1HandlersOnMouseMoveHandle(Sender: TObject;
  Event: IHTMLEventObj);
begin
  lblElementUndertheMouse.Caption := Format(Element under the Mouse [%s], [Event.srcElement.tagName])
end;

procedure TForm1.DisconnectHtmlListeners;
var
  i: Integer;
begin
  for i := HubLinksList.Count - 1 downto 0 do
  begin
    (HubLinksList[i] as IHubLink).Disconnect;
    HubLinksList.Remove(HubLinksList[i]);
  end;
end;

procedure TForm1.ConnectHtmlListener(ASender: TObject; Doc: IHTMLDocument2);
var
  CPC: IConnectionPointContainer;
begin
  if Assigned(Doc) then
  begin
    Doc.QueryInterface(IConnectionPointContainer, CPC);
    if Assigned(CPC) then
    begin
      HubLink := HtmlListener1.Connect2(CPC);
      HubLinksList.Add(HubLink);
    end;
  end;
end;

procedure TForm1.ConnectHtmlListeners;
var
  i: Integer;
  WB: IWebbrowser2;
  HTMLDoc: IHTMLDocument2;
begin
  for i := 0 to EmbeddedWB1.FrameCount - 1 do
  begin
    WB := EmbeddedWB1.GetFrame(i);
    if Assigned(WB) then
    begin
      if Succeeded(WB.Document.QueryInterface(IHTMLDocument2, HTMLDoc)) then
        ConnectHtmlListener(nil, HTMLDoc);
    end;
  end;
end;

procedure TForm1.EmbeddedWB1BeforeNavigate2(ASender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin
  with ASender as TEmbeddedWB do
    if pDisp = DefaultInterface then
    begin
      DisconnectHtmlListeners;
    end;
end;

procedure TForm1.EmbeddedWB1DocumentComplete(ASender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var
  WB: IWebbrowser;
  HTMLDoc: IHTMLDocument2;
begin
  if FEventsEnabled then
  begin
    WB := (pDisp as IWebBrowser);
    if Assigned(WB) then
      if Succeeded(WB.Document.QueryInterface(IHTMLDocument2, HTMLDoc)) then
        ConnectHtmlListener(ASender, HTMLDoc);
  end;
end;

procedure TForm1.btnEnableDisableClick(Sender: TObject);
begin
  if FEventsEnabled then
  begin
    DisconnectHtmlListeners;
    btnEnableDisable.Caption := Enable Events;
    FEventsEnabled := False;
  end else
  begin
    ConnectHtmlListeners;
    btnEnableDisable.Caption := Disable Events;
    FEventsEnabled := True;
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  DisconnectHtmlListeners;
  HubLinksList.Free;
end;


end.
bubuko.com,布布扣

完整代码下载:点击下载

delphi中EmbeddedWB网页html相互调用(二)

原文:http://www.cnblogs.com/luwenbin/p/3516691.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!