zoukankan      html  css  js  c++  java
  • delphi中EmbeddedWB网页html相互调用(二)

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

    控件下载 点击下载

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

    EmbeddedWB_D5-D2010_Version_14.69.1DemosEmbeddedWB Demos15 - THTMLListener_Demo

    关键方法:HtmlListener1HandlersOnClickHandle

    这里贴出这个demo的代码

    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.

    完整代码下载:点击下载

  • 相关阅读:
    感悟
    业务员如何听懂采购要吃回扣的暗语或者动作?
    回扣应该怎么给——某人的经验
    采购回扣的六种主要方式以及控制方法
    跟曹操学做事
    销售话术,一说就能“套”人,总有一款适合你
    感悟
    创业公司CEO:在公司猝死之前,我先猝死了!
    Python--实例变量
    Python--发送邮件
  • 原文地址:https://www.cnblogs.com/luwenbin/p/3516691.html
Copyright © 2011-2022 走看看