delphi中EmbeddedWB网页html相互调用(二)
我们可以通过控件 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的代码
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.
完整代码下载:点击下载
转自:https://www.itdaan.com/blog/2014/01/12/459b29a621ac37cc48a17261ee56758.html
分类:
Delphi
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?