DELPHI 中WEBBROWSER控件详解实例

合集下载

DelphiWebbrowser使用方法详解(一)

DelphiWebbrowser使用方法详解(一)

DelphiWebbrowser使用方法详解(一)
1.webbroser介绍
该组件是一个浏览器组件,可以显示一个指定地址的网页、设置网页打开时的主页以及对网页进行相关的操作,同时也可以对HTML 文件进行剪切、复制、粘贴、删除等操作。

该组件在Internet组件页中,属于TWebbrowser类。

它放在程序当中,可以像操作网页一样操作webbrowser控件。

2.webbrowser有哪些应用
webbrowser目前大多数都是完成自动提交或定时处理某种操作,例如:
1.网页数据采集,从别人的论坛里面把帖子采集出来,放到我们的论坛里面,例如火车头采集器;
2.发帖,不断的到百度贴吧或者其他论坛去发帖也称灌水;
3.网购,例如淘宝上限时秒抢之类的;
4.投票,不断的变换IP去投票;
5.抢火车票,不断的刷新火车票,一有票就提示抢购;
6.开发浏览器,像原来的的360,腾讯,搜狗浏览器都是基于IE 内核开发出来的;
3.同类控件
1.Indy中的idhttp 特点不可见,使用麻烦,有阻塞,但效率高;
2.ICS跟idhttp差不多
3.TEmbeddedwb第三方控件,跟webbrowser差不多,功能更强大,缺点是没有相关使用说明或资料;
本人目前使用的就是TEmbeddedWB,主要是该控件屏蔽弹窗很牛逼,而且能截获弹出窗口的信息,不管是不是带不带框架的,后续的介绍也都是基于TEmbeddedWB展开,它和webbroser的使用方法都差不多,有区别的会特意注明。

搞了N久的Webbroser,今天终于有心情把它总结出来贡献给大
家,希望能帮助到那些使用webbrowser的人们,转载请注明出处,谢谢!未完待续。

用Delphi做简单的网页浏览器

用Delphi做简单的网页浏览器
用delphi做简单的网页浏览器delphi浏览器控件delphi浏览器delphi多页面浏览器delphi图像浏览器谷歌浏览器打不开网页360浏览器打不开网页网页浏览器网页游戏浏览器网页游戏加速浏览器
用Delphi做简单的网页浏览器
1,在internet中找到webbrowers
2,拖到窗体上。
3,该组件常用方法有
begin
wb1.GoForward;//前进
end;
procedure TForm1.btn3Click(Sender:TObject);
begin
wb1.Stop;//停止
end;
procedure TForm1.btn4Click(Sender:TObject);
begin
wb1.Refresh;//刷新
end;
procedure TForm1.btn5Click(Sender:TObject);
begin
wb1.GoHome;//返回主页
edt1.Text:='about blank';
end;
procedure TForm1.tlb1Click(Sender:TObject);
begin
close;//退出
Navigate浏览
stop停goforward前进
这些都是访问网站常用的几个动作
4,设置界面
5,输入代码如下:
procedure TForm1.btn7Click(Sender:TObject);
begin
wb1.Navigate(edt1.Text);//浏览
end;
end;
procedure TForm1.btn1Click(Sender:TObject);

用TWebBrowser组件在DELPHI中POST数据和取得网页源文件

用TWebBrowser组件在DELPHI中POST数据和取得网页源文件

如果能够成功的连接返回 True,否则返回 False;
以下是一个判断当前计算机是否联网的例子:
procedure TForm1.Button1Click(Sender: TObject);
begin
if InternetCheckConnection('/', 1, 0) then
以下是一个判断当前计算机是否可以获得 Internet 服务的例子:
function TForm1.CheckOffline: boolean;
var
ConnectState: DWORD;
StateSize: DWORD;
begin
ConnectState:= 0;
end;
end.
< 2:WinInet函数相关 >
DWORD dwConnectState;
CString strConnectState;
BOOL bOK = InternetGetConnectedState( &dwConnectState, 0);
IN DWORD dwOption,
OUT LPVOID lpBuffer,
IN OUT LPDWORD lpdwBufferLength
);
参数的意义是:
hInternet:查询对象的 Internet 句柄(全局查询时为 nil),
dwOption:查询的项目;
PostStr:='Login.Token1=04538&Login.Token2=*******&Submit=%B5%C7+%C2%BC';
target:=NULL;

delphi WebBrowser控件实现对IE浏览器的各种控制

delphi WebBrowser控件实现对IE浏览器的各种控制
delphi WebBrowser 控件实现对 IE 浏览器的各种控制
WebBrowser 控件实现对 IE 浏览器的各种控制
在不是 js 打开的页面上按 window.close(),会有提示框,很烦,现在可以不用了,没有提示框直 接关闭窗口。
试试下面代码:
<object
id="WebBrowser"
■属性■ <input name=Button onClick=document.all.WebBrowser.ExecWB(10,1) type=button value= 属 性 ><OBJECT classid=CLSID:8856F961_340A_11D0_A96B_00C04FD705A2 height=0 id=WebBrowser width=0></OBJECT> ■打印■ <input name=Button onClick=document.all.WebBrowser.ExecWB(6,1) type=button value= 打 印 ><OBJECT classid=CLSID:8856F961_340A_11D0_A96B_00C04FD705A2 height=0 id=WebBrowser width=0></OBJECT> ■页面设置■ <input name=Button onClick=document.all.WebBrowser.ExecWB(8,1) type=button value= 页 面 设 置 ><OBJECT classid=CLSID:8856F961_340A_11D0_A96B_00C04FD705A2 height=0 id=WebBrowser width=0></OBJECT> ■刷新■ <input type=button value=刷新 name=refresh onclick="window.location.reload()"> ■导入收藏■ <input type="button" name="Button" value=" 导 入 收 藏 夹 " onClick=window.external.Impt; ■导出收藏■ <input type="button" name="Button3" value=" 导 出 收 藏 夹 " onClick=window.external.ImportExportFavorites(false,);> ■加入收藏■ <INPUT name=Button2 onclick="window.external.AddFavorite(location.href, document.title)" type=button value=加入收藏夹> ■整理收藏夹■ <INPUT name=Submit2 onclick="window.external.ShowBrowserUI(OrganizeFavorites, null)" type=button value=整理收藏夹> ■查看原文件■ <INPUT name=Button onclick=window.location = "view-source:" + window.location.href type=button value=查看源文件> ■语言设置■ <INPUT name=Button onclick="window.external.ShowBrowserUI(LanguageDialog, null)" type=button value=语言设置> ■前进■ <INPUT name=Submit onclick=history.go(1) type=submit value=前进> ■后退■ <INPUT name=Submit2 onclick=history.go(-1) type=submit value=后退>

Delphi实现HTMLWebBrowser实现HTML界面

Delphi实现HTMLWebBrowser实现HTML界面

Delphi实现HTMLWebBrowser实现HTML界面Delphi实现HTMLWebBrowser实现HTML界面HTML的界面有以下特点:图文混排,格式灵活,可以包含Flash、声音和视频等,实现图文声像的多媒体界面,而且易于建立和维护。

另外,HTML的显示环境一般机器上都具备,通常不需要安装额外的软件。

当然,HTML界面也有它欠缺的方面,即:界面控制能力有限,代码调试不便----虽然DHTML提供了比较强的编程特性,但是比起Delphi的传统的开发语言和工具来,对界面的控制能力,尤其是和数据交互时的控制能力还是稍逊一筹。

了解了这些特点,我们就可以在实际应用开发中,适时地选择HTML技术。

下面举个例子:一种仪器的管理程序,需要显示该仪器的操作方法文档,包含文字和图片,并要求可以隐藏或显示文档,并能安要求打印。

这个应用中,图文显示、隐藏/显示部分文档、图文打印等需求,都是HTML界面所擅长的,用传统的表单控件实现几乎无法想像。

用什么实现HTML的界面用Delphi实现HTML界面的应用主要有两种选择:WebBrowser Control或MSHTML。

为了弄清两者如何选择,我们先来看看Internet Exporer 4.0及其后续版本的体系结构:/workshop/graphics/IE4Arch.gif" width=305 border=0>IE浏览器是建立在SHDOCVW.DLL组件之上的,而SHDOCVW.DLL则建立在MSHTML.DLL组件之上,底层则包括脚本引擎等。

SHDOCVW.DLL提供了对活动文档(Active Document)的支持----例如Word等文档可以在IE中显示,并提供导航、in-place*连接、收藏夹、浏览历史和分级内容选择(PICS: Platform for Internet Content Selection)等功能。

SHDOCVW.DLL组件虽然也提供了很多接口可以单独使用,但是通常所指的SHDOCVW.DLL就是WebBrowser Control。

delphiWebBrowser的使用方法详解(五)

delphiWebBrowser的使用方法详解(五)

delphiWebBrowser的使用方法详解(五)/xtfnpgy/article/details/15809635网页代码:<SELECT id=fy onchange=TouchRefresh(1) name=fy> <OPTION selected value=15>每頁顯示15筆</OPTION> <OPTION value=30>每頁顯示30筆</OPTION> <OPTION value=60>每頁顯示60筆</OPTION></SELECT>1.webbrowser执行网页中的JS函数如果要执行T ouchRefresh(1)函数:webbrowser1.oleobject.document.parentwindow.ExecScript( 'TouchRefresh(1)’,'Javascript');webbrowser执行自己的JS函数:wb1.OleObject.document.parentwindow.ExecScript('alert(''自定义函数');','javascript');方法2:wb1.Navigate('javascript:alert(''执行成功!'');');2.webbrowser选择下拉列表varole : olevariantbeginole := webbrowser1.oleobject.document.GetElementByID('fy');ole.value := 60; //下拉框用value,复选框和多选框用checked:='true'ole.onchange; //调用onchange事件end;3.webbrowser按照Form提交(针对提交按钮无id和name的情况)网页代码:<FORM id=loginForm onsubmit="return validate_form()" method=post action=/pass/serviceLoginAuth2><INPUT id=passToken type=hidden name=passToken><INPUT style="DISPLAY: none" id=user class="input_kuang item errortip" name=user><INPUT style="DISPLAY: none" id=pwd class="input_kuang item errortip" value="" type=password name=pwd> <DIV class="sub_login flt_l"><INPUT class="no_bg" value=登入 type=submit></DIV>提交方法:webbrowser1.OleObject.document.forms.item('loginForm'). submit;4.webbrowser去掉滚动条在download事件中:webbrowser1.oleobject.Document.body.Scroll := 'no';webbrowser1.oleobject.Document.documentElement.style.o verflow := 'hidden';webbrowser控制滚动条滚动:webbrowser1.OleObject.document.parentwindow.scrollby(0, 100);//第一个参数横向,第二个竖向 scrollby滚动多少webbrowser1.OleObject.document.parentwindow.scrollto(0, 1000);// scrollto滚动到某个位置5.webbrowser屏蔽鼠标右键TEmbeddedWB设置DisabledPopupMenuItems属性webbrowser1.DisabledPopupMenuItems := [rcmDefault,rcmImage,rcmControl,rcmTable,rcmSelText,rcmAnch or,rcmUnKnown,rcmImageArt,rcmImgDynSrc,rcmDebug,rcmAll]6.webbrowser屏蔽网页图片TEmbeddedWB设置DownloadImages属性webbrowser1.DownloadOptions := [];7.webbrowser按照元素的属性获取元素function GetDocLinkByHref(doc : IHTMLDocument2;str_url:string):IHTMLAnchorElement;vari : Integer;label_iDispatch : iDispatch;label_element : IHTMLAnchorElement; //引用mshtmlbeginResult := nil;doc := webbrowser1.document as Ihtmldocument2;if not Assigned(doc) thenExit;for i:=0 to doc.links.length-1 dobeginlabel_iDispatch := doc.links.item(i,0);label_element := doc.links.item(I,0) as IHTMLAnchorElement;if (AnsiPos(str_url,(doc.links.item(I,0) as IHTMLElement).getAttribute('tag',0))>0)thenbeginResult := label_element;Break;end;end;end;8.webbrowser TEmbededwb屏蔽弹窗并捕获弹窗信息 //在 TEmbededwb的OnShowMessage事件中处理procedure TForm1.wb1NavigateComplete2(Sender: TObject;const pDisp: IDispatch; var URL: OleVariant);VARstr_url : string;beginWb1.OleObject.document.parentWindow.execScript('windo w.alert=null;','JavaScript');Wb1.OleObject.document.parentWindow.execScript('windo w.open=null;','JavaScript');Wb1.OleObject.document.parentWindow.execScript('windo w.close=null;','JavaScript');Wb1.OleObject.document.parentWindow.execScript('windo w.showModalDialog=null;','JavaScript');Wb1.OleObject.document.parentwindow.execscript('functio n confirm() {return true;}','Javascript');end;function TForm1.webbrowser1ShowMessage(Sender: TObject; HWND: Cardinal; lpstrText, lpstrCaption: PWideChar; dwType: Integer; lpstrHelpFile: PWideChar;dwHelpContext: Integer; var plResult: Integer): HRESULT;beginplResult := IDOK; //屏蔽alert\open\close等弹窗Result := S_OK; //屏蔽confirm确认框,并点击确认mmo1.Lines.Add(lpstrText); //lpstrText即为捕获到的弹窗内容end;屏蔽WebBrowser页面中的声音procedure CloseSound;varhWinmm: Cardinal;pwaveOutWrite: Pointer;lp: Cardinal;beginhWinmm := LoadLibrary('Winmm.dll');if hWinmm > 0 thenpwaveOutWrite := GetProcAddress(hWinmm, 'waveOutOpen');if pwaveOutWrite <> nil then beginVirtualProtect(pwaveOutWrite, 3, PAGE_EXECUTE_READWRITE, lp);Move(#C2#C2#18#$00, pwaveOutWrite^, 3);end;end;//强制Webbroser使用IE8内核 SetWBCoreIE8(8000);procedure SetWBCoreIE8(i_value:Integer);varstr_exeName : string;reg : TRegistry;begintrystr_exeName :=RightFromStr(Application.ExeName,'\',False);reg := TRegistry.Create;reg.RootKey := HKEY_LOCAL_MACHINE;if reg.OpenKey('Software\Microsoft\Internet Explorer\Main\FeatureControl', False) thenbeginif not reg.KeyExists('FEATURE_BROWSER_EMULATION') then reg.CreateKey('FEATURE_BROWSER_EMULATION');end;reg.CloseKey;if reg.OpenKey('Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION ', False) thenbeginreg.WriteInteger(str_exeName,i_value);// if not reg.ValueExists(str_exeName) then// begin// reg.WriteInteger(str_exeName,i_value);// end;end;reg.CloseKey;reg.Free;exceptend;end;最后奉献以前收集的关于WB的文章链接:Delphi Webbrowserdelphi 模拟自动登录网页webbrowserdelphi webbrowser查找对象实现自动登录_delphi webbrowser与delphi互动WebBrowser组件和MSHTML 在Delphi中的使用Delphidelphi中Webbrowser - Max Woods - 博客园WebBrowser组件和MSHTML 在Delphi中的使用webbrowser轻松实现自动填表WebBrowser 操作记要 - 万一 - 博客园delphi中Webbrowser的使用技巧 - wystec的日志 - 网易博客delphi webbrowser 遍历网页元素Delphi7 Webbrowser制作网页表单自动提交器按步分析(1) - 中星9号 - 博客园delphi中如何在多线程环境下操作webbrowser控件delphi利用webservise登陆百度VB WebBrowser 为页面添加代码的方法_百度知道关闭webbrowser的弹出框(对话框Delphi中WebBrowser(或者EmbeddedWebBrowser)控件打开部分网站报“Invalid floating point operation”异常的解决方法- XuXn - 博客园Delphi中webbrowser的document 对象的属性方法事件_硬软兼得博客_新浪博客Delphi获取句柄并发送消息delphi WebBrowser获取iframe页面内容Twebbrowser如何写多线程? - Delphi _ 网络通信_分布式开发【发现】如何屏蔽掉WebBrowser在刷新网页等时候发出的声音- Boringlamb - 博客园对ExtendedWebBrowser的再扩展(续)_呼吸空间_百度空间接收IWebBrowser2的自动化事件_My_百度空间delphi WebBrowser 开发浏览器_SAP学习_abap_百度空间【转】WebBrowser的Cookie操作(与CookieContainer的关系)_奎宇工作室_百度空间蓝鸟-Delphi的WebBrowser改造,对网页中Alter等对话框的改造方法(转载)如何找到webbrowser打开网页中flash的接口?能否用这个接口控制flash的播放?_VC高级研究_积木群组webBrowser获取网页flash句柄模拟单击的问题- .NET技术_ C#VB 如何向 WebBrowser1 中的flash发送左边点击事件 - VB _ 网络编程用WebBrowser实现HTML界面的应用扩展WebBrowser 控件DragWebBrowser FlashGameWebBrowser_C# 视角_CS程序员之窗WebBrowser 设置代理(100分) - Delphi _ 网络通信_分布式开发屏蔽WebBrowser页面中传出来的声音 - jxgxy - 博客园可以对同一个程序中的多个WebBrowser设置不用的代理服务器吗?本地:双线路、双IP、双网卡设置上网_我是谁?—Andy Gu_百度空间Delphi中使用EmbeddedWB屏蔽指定内容的网页对话框- Patrick Pullman - 博客园Web Browser Control –Specifying the IE Version - Rick Strahl's Web LogWebBrowser与IE的关系,如何设置WebBrowser工作在IE9模式下? - BobLiu - 博客园WebBrowser 中,无法释放内存? - CSDN论坛 - 为什么浏览器会使用多进程架构。

delphi webbrowser 使用方法

delphi webbrowser 使用方法

delphi webbrowser 使用方法Delphi WebBrowser 使用方法Delphi WebBrowser是一种强大的组件,可以嵌入web页面到Delphi应用程序中。

本文将详细介绍使用Delphi WebBrowser的各种方法。

1. 安装和引用要使用Delphi WebBrowser,首先需要做以下几步操作:1.下载并安装Delphi WebBrowser组件包。

2.打开Delphi IDE,创建新项目或打开现有项目。

3.在项目中导入WebBrowser组件包(在IDE的”Component”菜单中选择”Install Packages”)。

2. 创建和显示WebBrowser使用Delphi WebBrowser,你可以轻松创建和显示一个WebBrowser窗口。

以下是一个简单的示例:procedure (Sender: TObject);beginWebBrowser1 := (Self);:= Self;:= alClient;('end;在上述示例中,我们使用Form的OnCreate事件创建了一个WebBrowser对象,并将其展示在一个窗口上。

属性Align设置为alClient,将WebBrowser充满整个窗口。

最后,通过调用Navigate 方法,我们使WebBrowser加载了指定的网址。

3. 与Web页面交互Delphi WebBrowser允许你与嵌入的Web页面进行交互。

以下是一些常用方法的示例:执行JavaScript代码你可以使用Delphi WebBrowser的方法来执行JavaScript代码并获取返回值。

以下示例演示了如何执行JavaScript代码并将结果显示在一个Label控件中:procedure (const ACode: string);varvJsResult: OleVariant;begin// Execute JavaScript code and get the resultvJsResult := (ACode, 'JavaScript');:= vJsResult;end;操作DOM元素要操作Web页面中的DOM元素,你可以使用Delphi WebBrowser 的方法来获取和修改元素的属性和内容。

Delphi 中WebBrowser控件详解实例

Delphi 中WebBrowser控件详解实例

Delphi 中WebBrowser控件详解实例2008-10-18 下午 06:58很久都没有原创了,前几天帮朋友做了个网址发布程序,主要应用到了WebBrowser控件。

今天主要给大家演示一下过程,让大家学习一下Delphi工具。

WebBrowser功能:1。

自动加载网页2。

去除WebBrowser滚动条3。

WebBrowser自身打开页面4。

禁止右键1。

首先,新建一个FROM窗体:2。

加入一个WEBBROWSER控件3。

调整后如下:4.这样一个webbrowser就完成了,下一步我们来让程序打开后自动加载一个网页。

核心代码:WebBrowser1.Navigate('');双击窗体灰色处,对窗体进行初始化,在代码窗口中输入(Begin 与 End间输入核心代码):procedure TForm1.FormCreate(Sender: TObject);beginWebBrowser1.Navigate(''); //窗体初始化完成WEBBROWSER加载一个网页end;5。

下面我们来实现禁止WEBBROWSER控件的滚动条功能:核心代码:WebBrowser1.oleobject.Document.bod y.Scroll:= ‘no’;利用这个代码去掉滚动条的前提是webbrowser中必须有打开的网页,也就是在网页加载完完毕后再去掉滚动条。

所以首先要判断页面是否加载完毕,如果加载完毕,就执行上面的语句去掉滚动条。

这时就要引入一个按扭控件来触发程序加入SPEEDBUTTEN调整形后:好了,现在可以实现禁止滚动条的功能了:第一步:在WebBrowser1DocumentComplete事件中置一个标志tag:=1(代表加载完毕)单击WEBBROWSER控件,在WebBrowser属性的EVENS事件中找到WebBrowser1DocumentComplete (双击)然后在代码窗口中输入:procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);begintag:=1; //去掉Webbrowser1滚动条的标志end;对SpeedButten控件操作:(双击onClick)加入如下代码:procedure TForm1.SpeedButton1Click(Sender: TObject); varDoc: IHTMLDocument2;begintag := 0; //去掉Webbrowser1滚动条的标志WebBrowser1.Navigate2(’’);while(tag=0) do Application.ProcessMessages; WebBrowser1.oleobject.Document.body.Scroll := ‘no’; end;注意:使用前必须在uses中加入mshtml;这样WebBrowser就禁止了滚动条。

delphi的webbrowser如何访问网页中某个frame里的组件?

delphi的webbrowser如何访问网页中某个frame里的组件?

delphi的webbrowser如何访问网页中某个frame里的组件?先取出对应frame的document,再取想要的元素,给你我写的函数,新人是应该带着进门的……//框架获取functionGetDocument(Document:IHTMLDocument2;Index:integer):IHTM LDocument2;//框架获取var frame_dispatch:IDispatch;framed:IHTMLWindow2;ole_index:OleVariant;beginole_index:=Index;frame_dispatch:=Document.Frames.IT em(ole_index);if frame_dispatch <> nil thenbeginframed:=frame_dispatch as IHTMLWindow2;result:=framed.Document as IHTMLDocument2;endelsebeginresult:=nil;end;end;//点击指定位置或名称的链接,或者给指定的名称或序号的元素赋值procedureGetItem(Document:IHTMLDocument2;Index:String;IsClick:Boolean;State:integer;Value:string);var IDoc1: IHTMLDocument2;ielc: IHTMLElementCollection;ihtml:IHTMLElement;input:IHTMLInputElement;TextArea:IHTMLTextAreaElement;i:integer;beginDocument.QueryInterface(IHTMLDocument2,iDoc1);ielc:=idoc1.Get_all;if(trystrtoint(Index,i))thenbeginif(IsClick)thenbeginihtml:=ielc.item(strtoint(Index),0) as IHTMLElement;ihtml.click;endelsebegincase State of0 :begininput:=ielc.item(strtoint(Index),0) as IHTMLInputElement;input.value:=Value;end;1 :beginTextArea:=ielc.item(strtoint(Index),0) as IHTMLTextAreaElement;TextArea.value:=Value;end;end;end;endelsebeginif(IsClick)thenbeginihtml:=ielc.item(Index,0) as IHTMLElement;ihtml.click;endelsebegincase State of0 :begininput:=ielc.item(Index,0) as IHTMLInputElement; input.value:=Value;end;1 :beginTextArea:=ielc.item(Index,0) as IHTMLTextAreaElement; TextArea.value:=Value;end;end;end;end;end;这是我百度的技术博客,不懂可以去上边看,或者问……。

delphi中 TWebBrowser的各种用法 获得网页中变量值

delphi中 TWebBrowser的各种用法  获得网页中变量值
end;
注意:使用前必须在uses中加入mshtml;
==========================题外话 去掉滚动条后如何翻页呢用如下代码
var
Doc IHTMLDocument2;
begin
Doc =WebBrowser1.Document as IHTMLDocument2;
4.调用网页中已知对象
src = WebBrowser1.OleObject.Document.getElementByID('img1').src
该方法其实就是javascript中的 getElementByID
5.获取页面中所有的frame
使用DHTML。
背景图片 WebBrowser1.OleObject.Document.body.background = 'bg.gif'
背景颜色 WebBrowser1.OleObject.Document.body.bgcolor = '#eeeeee'
begin
tag = 0; 去掉Webbrowser1滚动条的标志
WebBrowser1.Navigate2(’’);
while (tag=0) do
Application.ProcessMessages;
WebBrowser1.oleobject.Document.body.Scroll = ‘no’;
ppdisp = webBrowser.Application;
end;
屏蔽WebBrower的右键菜单
放一个ApplicationEvents控件,在ApplicationEvents的事件OnMessage中设置如下代码: (ApplicationEvents控件在delphi中的additional选项卡上找)

Delphi中WebBrowser的使用技巧汇总

Delphi中WebBrowser的使用技巧汇总
end;
屏蔽WebBrower的右键菜单
放一个ApplicationEvents控件,在ApplicationEvents的事件OnMessage中设置如下代码: (ApplicationEvents控件在delphi中的additional选项卡上找)
OnCommandStateChange = procedure(Sender: TObject; Command: Integer; Enable: WordBool) of object;
当执行新的命令时发生,Command为命令标识,Enable为是否允许执行该命令.
OnTitleChange = procedure(Sender: TObject; const Text: WideString) of object;
第一步:在WebBrowser1DocumentComplete事件中置一个标志tag:=1(代表加载完毕) 代码如下:
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch;
var URL: OleVariant);
SetNoteStr :=SetNoteStr+’<br><p align=center><font size=+2 color=#FFFFFF>实现webbrowser控件中显示动态html的程序代码</font></p>’;
StrStream:=TStringStream.Create(SetNoteStr);
begin
if WebBrowser1.Application = pDisp then showmessage(’页面已全部下载完毕’)

delphi TWebBrowser组件使用详解

delphi TWebBrowser组件使用详解

delphi TWebBrowser组件使用详解该组件是一个浏览器组件,可以显示一个指定地址的网页、设置网页打开时的主页以及对网页进行相关的操作,同时也可以对HTML文件进行剪切、复制、粘贴、删除等操作。

该组件在Internet组件页中。

1.属性(1)AddressBar属性设置是否显示地址栏,在TWebBrowser中没有用。

语法:property AddressBar: WordBool;(2)Busy属性确定Web浏览器组件是否正在导航到一个新的URL地址或正在下载文档。

语法:property Busy: WordBool;示例:如果该属性值为True,则在开始一个新的操作前,可用Stop方法中止当前操作,然后再导航到其他的页面,代码如下:procedure TForm1.BitBtn1Click(Sender: TObject);beginif WebBrowser1.Busy thenWebBrowser1.Stop;WebBrowser1.Navigate('');end;(3)Container属性访问Web浏览器父类或容器的接口。

语法:property Container: IDispatch;示例:如果Web浏览器没有一个具有Automation接口的容器,则该属性的值为空。

否则可以通过返回的接口,访问Web浏览器父类或容器,代码如下:if WebBrowser1.Container <> nil thenbeginWebBrowser1.Stop;endelseShowMessage('Web浏览器没有一个具有Automation接口的容器');(4)ControlInterface属性访问WebBrowser组件接口,这个接口允许一个Automation控制器访问Web浏览器的属性、方法和事件。

语法:property ControlInterface: IWebBrowser2;示例:显示WebBrowser1组件的名称,代码如下:Showmessage();(5)FullName属性指定主机上Web浏览器组件的可执行文件的完整的合法路径名。

delphi tedgebrowser 用法

delphi tedgebrowser 用法

Delphi TEdgeBrowser 是一款基于 Microsoft Edge 的浏览器控件,适用于 Delphi 编程语言。

它提供了一种简单而强大的方式,使开发人员能够在他们的 Delphi 应用程序中嵌入现代的 Web 浏览体验。

在本文中,我们将介绍 Delphi TEdgeBrowser 的用法,包括如何在Delphi 项目中集成该控件,以及如何利用其丰富的功能实现各种需求。

一、引入 Delphi TEdgeBrowser 控件要开始使用 Delphi TEdgeBrowser,首先需要确保你已经安装了最新版本的 Delphi,并且已经下载了 Delphi TEdgeBrowser 的 SDK。

一旦确认这些前提条件已满足,你就可以在 Delphi 项目中引入TEdgeBrowser 控件了。

在 Delphi 的界面设计器中,通过组件面板找到 TEdgeBrowser 控件,并将其拖拽到你的窗体或其他容器控件上即可。

二、基本用法一旦将 TEdgeBrowser 控件添加到你的 Delphi 项目中,你就可以开始享受其强大的功能了。

通过简单的几行代码,你就可以加载网页、执行 JavaScript 脚本以及与网页内容进行交互。

以下是一个简单的示例代码,演示了如何加载一个网页:```pascalprocedure TForm1.FormCreate(Sender: TObject);beginEdgeBrowser1.Navigate('end;```三、与网页交互除了简单的加载网页之外,Delphi TEdgeBrowser 还提供了丰富的API,使开发人员能够与嵌入的网页内容进行交互。

你可以通过调用TEdgeBrowser 控件提供的方法和事件来执行各种操作,例如执行JavaScript、修改网页内容、捕获网页事件等。

以下是一个演示如何执行 JavaScript 脚本的示例代码:```pascalprocedure TForm1.Button1Click(Sender: TObject);beginEdgeBrowser1.ExecuteScript('alert("Hello, world!")');end;```四、事件处理Delphi TEdgeBrowser 还支持各种事件,使开发人员能够监控和响应浏览器控件的各种状态变化和用户操作。

delphi edgebrowser 用法

delphi edgebrowser 用法

delphi edgebrowser 用法Delphi是一个流行的编程语言和集成开发环境(IDE),用于开发Windows平台上的应用程序。

EdgeBrowser是Delphi的一个第三方组件,它允许在应用程序中嵌入和操作Microsoft Edge浏览器。

使用Delphi EdgeBrowser可以实现许多有趣和强大的功能,如在应用程序中加载网页、操纵DOM元素、监控浏览器事件等。

首先,要使用Delphi EdgeBrowser组件,我们需要下载并安装它。

可以在互联网上搜索“Delphi EdgeBrowser”来找到并下载合适的版本。

下载完成后,解压缩文件并将DLL文件添加到Delphi项目的组件路径中。

接下来,我们需要在Delphi应用程序中创建一个TWebBrowser组件来承载EdgeBrowser。

在Delphi的窗体设计器中,将TWebBrowser组件拖放到窗体上。

然后,通过设置TWebBrowser组件的属性来指定EdgeBrowser的行为。

例如,可以设置TWebBrowser的Url属性来加载指定的网页。

在应用程序中加载网页后,我们可以使用EdgeBrowser的一些方法和属性来与网页进行交互。

例如,可以使用EdgeBrowser的Navigate方法在TWebBrowser中加载指定的URL。

可以使用EdgeBrowser的Stop方法停止加载网页。

可以使用EdgeBrowser的Refresh方法刷新当前网页。

Delphi EdgeBrowser还提供了许多其他功能,如在网页上执行JavaScript代码、截取网页的截图、获取网页元素等。

可以使用EdgeBrowser的ExecuteScript 方法来执行JavaScript代码。

可以使用EdgeBrowser的Capture方法来截取网页的截图。

可以使用EdgeBrowser的DOM接口来获取和操作网页元素。

除了上述基本功能之外,Delphi EdgeBrowser还提供了一些高级功能,如监控浏览器事件、拦截和修改HTTP请求等。

delphiWebBrowser的使用方法详解(四)

delphiWebBrowser的使用方法详解(四)

delphi WebBrowser 的使用方法详解(四)delphi WebBrowser 的使用方法详解(四) -webbrowser 轻松实现自动填表分类:Delphi Webbrowser TembeddedWB 2013-11-01 17:02 220 人阅读评论(0) 收藏举报目录(?)[+]webbrowser 轻松实现自动填表步骤如下:第一步:获取网页调用Webbrowser 的Navigate 系列函数。

等待网页装载完成,得到document 对象。

在调用webBrowser.Document 之前,请确保Webbrowser 网页装载完成,可以通过Webbrowser 的DocumentCompleted 事件进行监视。

小技巧先指定一个变量步骤如下:第一步:获取网页调用Webbrowser 的Navigate 系列函数。

等待网页装载完成,得到document 对象。

在调用webBrowser.Document 之前,请确保Webbrowser 网页装载完成,可以通过Webbrowser 的DocumentCompleted 事件进行监视。

小技巧先指定一个变量:IsCompleted在调用Webbrowser 的Navigate ,Refresh 系列函数之前,将IsCompleted 设为false。

在DocumentCompleted 事件中,如果ReadyState 为plete(值为4),则设IsCompleted 为true.调用webBrowser.Document 之前对IsCompleted 进行判断。

如果不为true,则延时循环等待,直到IsCompleted被设为true.第二步:设置网页元素数据确保得到document 对象之后,通过GetElementById 获取网页元素,如:HtmlElement user = webBrowser.Document.GetElementById("user"); HtmlElement password =webBrowser.Document.GetElementById("password"); 设置网页元素值:user.InnerText = "myname"; password.InnerText = "123456";小技巧作用SetAttribute 设置下拉框,复选框,多选框数据下拉框:secret.SetAttribute("value", "question1"); 复选框rememberme.SetAttribute("Checked", "True"); 多选框cookietime.SetAttribute("checked", "checked");当然,在SetAttribute 之前,也可以用GetAttribute 取相关的属性先进行判断,再根椐需要进行设置。

DelphiXE5FireMonkey,Windows下的WebBrowser组件编写

DelphiXE5FireMonkey,Windows下的WebBrowser组件编写

Delphi XE5 FireMonkey,Windows下的W ebBrowser组件编写其实FireMonkey非常好用, 但就是缺了WINDOWS下的浏览器组件, 有时程序可能需要一个嵌入式的框框, 而Delphi且没有为我们提供这个东东...咋整呢...好像有大牛使用谷歌浏览器组件封装过一个唉, 具体不知道了,我也没看过, 听说还要带一大堆的dll文件, 貌似有几十M呢,.........好像用不着啊.........那我们该怎么办呢....其实在FireMonkey的前身DxScene中有一个3d浏览器的例程, 不知道大家看过没有, 我是照着写了下, 不过是将浏览器封装在DLL中的,这样可以必免引入vcl库了,,,,但不好就是要带一个dll走........实现了是实现了, 但感觉用着不咋爽,特别是大面积的还带有js自动刷新某些页面的时候就会发现cpu占得很大, 绘图效果还不好了....于是就有了一个想法, 能不能将浏览器组件冰封装在dll中的Form中呢..然后以子父窗口的形式来创建,,, 答案是肯定可以的, 接下来我们就开始实现吧首先我们需要编写一个dll,, 在里面创建一个Form,再在Form上放置一个浏览器组件, 将Form设置为无边框模式, Webbrowser设置为Client对齐然后我们需要重新编写浏览器的事件, 如下大家会发现少下sender这个参数, 其实我是故意不要的,因为也用不着, 呵呵, 这里我定义了浏览器最基本的一些事件, 然后该怎么办呢, 继续看吧[delphi] view plaincopy在CODE上查看代码片派生到我的代码片{***************************************************************************} { }{ 功能:FMX.ZYJ 浏览器组件}{ 名称:FMX.ZYJ.Win.WebBrowser.pas }{ 版本:1.1 }{ 环境:Win8.1 }{ 工具:Delphi XE3 AppMethod DelphiXE6 }{ 日期:2014/3/28 19:35:56 }{ 作者:ying32 }{ QQ :396506155 }{ MSN :***************}{ E-mail:******************.com}{ Website: }{ 版权所有(C) 2014-2014 ying32 All Rights Reserved }{ }{---------------------------------------------------------------------------}{ }{ 备注:Windows浏览器组件}{ }{ }{ }{***************************************************************************} [delphi] view plaincopy在CODE上查看代码片派生到我的代码片unit FMX.ZYJ.Win.WebBrowser;interfaceusesWinapi.Windows,WebBrowserUnit,System.SysUtils,System.Classes,System.Types,System.UITypes,FMX.Types,FMX.Controls,FMX.Forms;[delphi] view plaincopy在CODE上查看代码片派生到我的代码片typeTWebDocumentComplete = procedure(const pDisp: IDispatch; var URL: OleVariant) of object;TWebStatusTextChange = procedure(const Text: WideString) of object;TWebTitleChange = procedure(const Text: WideString) of object; TWebVisible = procedure(Visible: WordBool) of object;TWebQuit = procedure of object;TWebPropertyChange = procedure(const szProperty: WideString) of object;TWebProgressChange = procedure(Progress, ProgressMax: Integer) of object;TWebNewWindow2 = procedure(var ppDisp: IDispatch; var Cancel: WordBool) of object;TWebNavigateComplete2 = procedure(const pDisp: IDispatch; var URL: OleVariant) of object;TWebFullScreen = procedure(FullScreen: WordBool) of object; TWebDownloadBegin = procedure of object; TWebDownloadComplete = procedure of object; TWebCommandStateChange = procedure(Command: Integer; Enable: WordBool) of object;TWebBeforeNavigate2 = procedure(const pDisp: IDispatch; var URL, Flags,TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool) of object;接下来我们需要定义一些私有的变量,将这个事件以属性的方式重新输出到外面去[delphi] view plaincopy在CODE上查看代码片派生到我的代码片privateFOnDocumentComplete: TWebDocumentComplete;FOnStatusTextChange: TWebStatusTextChange; FOnTitleChange: TWebTitleChange;FOnVisible: TWebVisible;FOnQuit: TWebQuit;FOnPropertyChange: TWebPropertyChange; FOnProgressChange: TWebProgressChange;FOnNewWindow2: TWebNewWindow2;FOnNavigateComplete2: TWebNavigateComplete2; FOnFullScreen: TWebFullScreen;FOnDownloadBegin: TWebDownloadBegin; FOnDownloadComplete: TWebDownloadComplete; FOnCommandStateChange: TWebCommandStateChange; FOnBeforeNavigate2: TWebBeforeNavigate2;publicproperty OnDocumentComplete: TWebDocumentComplete read FOnDocumentComplete write FOnDocumentComplete;property OnStatusTextChange: TWebStatusTextChange read FOnStatusTextChange write FOnStatusTextChange;property OnTitleChange: TWebTitleChange read FOnTitleChange write FOnTitleChange;property OnVisible: TWebVisible read FOnVisible write FOnVisible; property OnQuit: TWebQuit read FOnQuit write FOnQuit;property OnPropertyChange: TWebPropertyChange read FOnPropertyChange write FOnPropertyChange;property OnProgressChange: TWebProgressChange read FOnProgressChange write FOnProgressChange;property OnNewWindow2: TWebNewWindow2 read FOnNewWindow2 write FOnNewWindow2;property OnNavigateComplete2: TWebNavigateComplete2 read FOnNavigateComplete2 write FOnNavigateComplete2;property OnFullScreen: TWebFullScreen read FOnFullScreen write FOnFullScreen;property OnDownloadBegin: TWebDownloadBegin read FOnDownloadBegin write FOnDownloadBegin;property OnDownloadComplete: TWebDownloadComplete read FOnDownloadComplete write FOnDownloadComplete;property OnCommandStateChange: TWebCommandStateChange read FOnCommandStateChange write FOnCommandStateChange;property OnBeforeNavigate2: TWebBeforeNavigate2 read FOnBeforeNavigate2 write FOnBeforeNavigate2;end;好了, 我们已经建议好事件了, 接下来就是在浏览的事件中调用我们的这些事件, 这里给出一个参考, 其它都一样了[delphi] view plaincopy在CODE上查看代码片派生到我的代码片procedure TWebForm.wbDocumentComplete(Sender: TObject;const pDisp: IDispatch; var URL: OleVariant);begintryif Assigned(OnDocumentComplete) thenOnDocumentComplete(pDisp, URL);exceptend;end;完成了以上我们的浏览器组件还不算呢, 接下来我们要导出这些东西, 在这里我是以标准的function导出的, 原来我打算创建一个类管理, 后来我虽然用了这个方法,但实际没多大用下, 大家将就着看吧接下来我们编写创建浏览器的函数吧[delphi] view plaincopy在CODE上查看代码片派生到我的代码片function TWebWindowManager.BrowserCreate(AParent: Cardinal; AVisible: Boolean; ALeft, ATop, AWidth, AHeight: Integer): Cardinal; varLWeb: TWebForm;beginResult := 0;if not IsWindow(AParent) then Exit;LWeb := TWebForm.Create(Application);if Assigned(LWeb) thenbeginWindows.SetParent(LWeb.Handle, AParent);// 貌似有时无法前台,故有此函数调用// Windows.SetForegroundWindow(AParent);SetWindowPos(LWeb.Handle, 0, ALeft, ATop, AWidth, AHeight,SWP_NOACTIVATE);if AVisible thenShowWindow(LWeb.Handle, SW_SHOWNORAML);FList.Add(LWeb);Result := Cardinal(LWeb);// Result := FList.Add(LWeb) + 1;end;end;呵呵, 大家别理会注释掉的代码就好了. 那是以前写的方法....没去掉.....释放掉[delphi] view plaincopy在CODE上查看代码片派生到我的代码片function TWebWindowManager.BrowserFree(Handle: Cardinal): Boolean;varP: Pointer;beginResult := False;P := GetItem(Handle);if Assigned(P) thenbeginTWebForm(P).Free;FList.Remove(P);// FList.Delete(Integer(Handle) - 1);Result := True;end;end;再下来就是浏览器的几个方法了.[delphi] view plaincopy在CODE上查看代码片派生到我的代码片procedure TWebWindowManager.BrowserNavigateA(Handle: Cardinal; AURL: PAnsiChar);varP: Pointer;begintryP := GetItem(Handle);if Assigned(P) thenTWebForm(P).wb.Navigate(AURL);exceptend;end;procedure TWebWindowManager.BrowserNavigateW(Handle: Cardinal; AURL: PWideChar);varP: Pointer;begintryP := GetItem(Handle);if Assigned(P) thenTWebForm(P).wb.Navigate(AURL);exceptend;end;实现方法很简单, 那事件呢? 其实一样也简单, 看下面[delphi] view plaincopy在CODE上查看代码片派生到我的代码片procedure TWebWindowManager.BrowserDocumentComplete(Handle: Cardinal; AEvent: TWebDocumentComplete);varP: Pointer;beginP := GetItem(Handle);if Assigned(P) thenbeginif (not Assigned(TWebForm(P).OnDocumentComplete)) or(@TWebForm(P).OnDocumentComplete <> @AEvent) then TWebForm(P).OnDocumentComplete := AEvent;end;end;是不是简单啊, 其实的都类似了, 这里就不贴出来了然后我们导出这些函数, 实际上我外面还重新编写了一个stdcall的函数...因为当时没想好,又懒得改, 所以....[delphi] view plaincopy在CODE上查看代码片派生到我的代码片exportsBrowserCreate name 'webCreate',BrowserFree name 'webFree',BrowserSetVisible name 'webSetVisible',BrowserMove name 'webMove',呵呵,我重命名了....以上dll部分就编写好了, 接下来是函数申明... .这个就不用我写了吧.....再下来就是编写FMX组件啦这里我再一次重新定义了事件[delphi] view plaincopy在CODE上查看代码片派生到我的代码片typeTWebDocumentCompleteEvent = procedure(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant) of object; TWebStatusTextChangeEvent = procedure(Sender: TObject; const Text: WideString) of object;TWebTitleChangeEvent = procedure(Sender: TObject; const Text: WideString) of object;TWebVisibleEvent = procedure(Sender: TObject; Visible: WordBool) of object;TWebQuitEvent = procedure(Sender: TObject) of object;TWebPropertyChangeEvent = procedure(Sender: TObject; const szProperty: WideString) of object;TWebProgressChangeEvent = procedure(Sender: TObject; Progress, ProgressMax: Integer) of object;TWebNewWindow2Event = procedure(Sender: TObject; var ppDisp: IDispatch; var Cancel: WordBool) of object;TWebNavigateComplete2Event = procedure(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant) of object;TWebFullScreenEvent = procedure(Sender: TObject; FullScreen: WordBool) of object;TWebDownloadBeginEvent = procedure(Sender: TObject) of object;TWebDownloadCompleteEvent = procedure(Sender: TObject) of object;TWebCommandStateChangeEvent = procedure(Sender: TObject; Command: Integer; Enable: WordBool) of object; TWebBeforeNavigate2Event = procedure(Sender: TObject; const pDisp: IDispatch; var URL, Flags,TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool) of object;下面是组件类啦[delphi] view plaincopy在CODE上查看代码片派生到我的代码片TZYJWebBrowser = class(TControl)strict privateFWebHandle: Cardinal;privateFOnDocumentComplete: TWebDocumentCompleteEvent; FOnStatusTextChange: TWebStatusTextChangeEvent; FOnTitleChange: TWebTitleChangeEvent;FOnVisible: TWebVisibleEvent;FOnQuit: TWebQuitEvent;FOnPropertyChange: TWebPropertyChangeEvent; FOnProgressChange: TWebProgressChangeEvent; FOnNewWindow2: TWebNewWindow2Event; FOnNavigateComplete2: TWebNavigateComplete2Event; FOnFullScreen: TWebFullScreenEvent; FOnDownloadBegin: TWebDownloadBeginEvent; FOnDownloadComplete: TWebDownloadCompleteEvent; FOnCommandStateChange: TWebCommandStateChangeEvent; FOnBeforeNavigate2: TWebBeforeNavigate2Event;function GetDefaultInterface: IDispatch;function GetDocument: IDispatch;protectedprocedure Resize; override;procedure Paint; override;procedure SetVisible(const Value: Boolean); override;procedure FDocumentComplete(const pDisp: IDispatch; var URL: OleVariant);procedure FStatusTextChange(const Text: WideString);procedure FTitleChange(const Text: WideString);procedure FVisible2(Visible: WordBool);procedure FQuit();procedure FPropertyChange(const szProperty: WideString); procedure FProgressChange(Progress, ProgressMax: Integer); procedure FNewWindow2(var ppDisp: IDispatch; var Cancel: WordBool);procedure FNavigateComplete2(const pDisp: IDispatch; var URL: OleVariant);procedure FFullScreen(FullScreen: WordBool);procedure FDownloadBegin();procedure FDownloadComplete();procedure FCommandStateChange(Command: Integer; Enable: WordBool);procedure FBeforeNavigate2(const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool);publicconstructor Create(AOwner: TComponent); override;destructor Destroy; override;procedure GoHome;procedure GoBack;procedure GoForward;procedure GoSearch;procedure Stop;procedure Refresh;procedure CanvasToBuffer(DC: HDC);procedure Navigate(URL: string);property DefaultInterface: IDispatch read GetDefaultInterface; property Document: IDispatch read GetDocument; publishedproperty Action;property Align default TAlignLayout.alNone;property Anchors;property CanFocus default True;property CanParentFocus;property ClipChildren default False;property ClipParent default False;property DisableFocusEffect;property Height;property Locked default False;property Margins;property Opacity;property Padding;property Position;property RotationAngle;property RotationCenter;property Scale;property TabOrder;property Visible default True;property Width;property OnDocumentComplete: TWebDocumentCompleteEvent read FOnDocumentComplete write FOnDocumentComplete;property OnStatusTextChange: TWebStatusTextChangeEvent read FOnStatusTextChange write FOnStatusTextChange;property OnTitleChange: TWebTitleChangeEvent read FOnTitleChange write FOnTitleChange;property OnVisible: TWebVisibleEvent read FOnVisible write FOnVisible;property OnQuit: TWebQuitEvent read FOnQuit write FOnQuit; property OnPropertyChange: TWebPropertyChangeEvent read FOnPropertyChange write FOnPropertyChange;property OnProgressChange: TWebProgressChangeEvent read FOnProgressChange write FOnProgressChange;property OnNewWindow2: TWebNewWindow2Event read FOnNewWindow2 write FOnNewWindow2;property OnNavigateComplete2: TWebNavigateComplete2Event read FOnNavigateComplete2 write FOnNavigateComplete2;property OnFullScreen: TWebFullScreenEvent read FOnFullScreen write FOnFullScreen;property OnDownloadBegin: TWebDownloadBeginEvent read FOnDownloadBegin write FOnDownloadBegin;property OnDownloadComplete: TWebDownloadCompleteEvent read FOnDownloadComplete write FOnDownloadComplete;property OnCommandStateChange: TWebCommandStateChangeEvent read FOnCommandStateChange write FOnCommandStateChange;property OnBeforeNavigate2: TWebBeforeNavigate2Event read FOnBeforeNavigate2 write FOnBeforeNavigate2;end;然后我们构造这个吧[delphi] view plaincopy在CODE上查看代码片派生到我的代码片constructor TZYJWebBrowser.Create(AOwner: TComponent); varObj: TFmxObject;R: TRectF;begininherited Create(AOwner);FWebHandle := 0;Width := 400;Height := 200;CanFocus := True;if not (csDesigning in ComponentState) thenbeginR := AbsoluteRect;Obj := AOwner as TFmxObject;while Obj.Parent <> nil doObj := Obj.Parent;if (Obj <> nil) and (Obj is TCustomForm) thenFWebHandle := webCreate(FmxHandleToHWND((Obj as TCustomForm).Handle),Visible,Round(R.Left),Round(R.Top),Round(R.Right - R.Left),Round(R.Bottom - R.Top));if FWebHandle = 0 thenraise Exception.Create('创建浏览器组件失败!');// 下面的绑定浏览器的事件webDocumentComplete(FWebHandle, FDocumentComplete); webStatusTextChange(FWebHandle, FStatusTextChange); webTitleChange(FWebHandle, FTitleChange);webVisible(FWebHandle, FVisible2);webQuit(FWebHandle, FQuit);webPropertyChange(FWebHandle, FPropertyChange); webProgressChange(FWebHandle, FProgressChange); webNewWindow2(FWebHandle, FNewWindow2); webNavigateComplete2(FWebHandle, FNavigateComplete2); webFullScreen(FWebHandle, FFullScreen);webDownloadBegin(FWebHandle, FDownloadBegin); webDownloadComplete(FWebHandle, FDownloadComplete); webCommandStateChange(FWebHandle, FCommandStateChange);webBeforeNavigate2(FWebHandle, FBeforeNavigate2);end;end;然后我们还要处理组件大小发生改变以使用浏览器大小随之改变[delphi] view plaincopy在CODE上查看代码片派生到我的代码片procedure TZYJWebBrowser.Resize;varR: TRectF;begininherited;if not (csDesigning in ComponentState) thenbeginR := AbsoluteRect;webMove(FWebHandle, Round(R.Left),Round(R.Top),Round(R.Right - R.Left),Round(R.Bottom - R.Top));end;end;浏览器的可视,[delphi] view plaincopy在CODE上查看代码片派生到我的代码片procedure TZYJWebBrowser.SetVisible(const Value: Boolean);begininherited;if not (csDesigning in ComponentState) thenwebSetVisible(FWebHandle, Value);end;然后还有各个事件的传递, 这里只举几个例子. 其它都一样[delphi] view plaincopy在CODE上查看代码片派生到我的代码片procedure TZYJWebBrowser.FCommandStateChange(Command: Integer; Enable: WordBool);beginif Assigned(FOnCommandStateChange) then FOnCommandStateChange(Self, Command, Enable);end;procedure TZYJWebBrowser.FBeforeNavigate2(const pDisp: IDispatch; var URL, Flags,TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool);beginif Assigned(FOnBeforeNavigate2) thenFOnBeforeNavigate2(Self, pDisp, URL, Flags, TargetFrameName, PostData, Headers, Cancel);end;function TZYJWebBrowser.GetDefaultInterface: IDispatch; beginResult := webDefaultInterface(FWebHandle);end;function TZYJWebBrowser.GetDocument: IDispatch; beginResult := webDocument(FWebHandle);end;procedure TZYJWebBrowser.GoBack;beginwebGoBack(FWebHandle);end;。

delphi中Webbrowser的使用技巧

delphi中Webbrowser的使用技巧

WebBrowser组件和MSHTML 在Delphi 中的使用由于项目需要,近来研究了一下WebBrowser组件和MSHTML 在Delphi中的使用,整理了一下这段时间研究的结果,写下来一是方便大家查阅,二也可以加深我自己的记忆.希望能对大家有所帮助… …,同时,如果有更好的处理方式或者我没有提到的问题,请大家也告诉我哦, 咱们一块进步… ...,其中一部分是我从网络中搜集的资料,谢谢那些兄弟们… … MSHTML把HTML页面中的元素封装成了IHTMLInputElement、 IHTMLInputButtonElement、IHTMLInputTextElement、IHTMLTextAreaElement、IHTMLTitleElement、IHTMLFormElement 等等组件接口。

在程序中可以通过MSHTML提供的IHTMLDocument2接口得到整个Document对象,IHTMLElementCollection接口得到所有页面元素的集合,通过该接口的Item方法可以得到具体的某个组件,然后设置和读取该组件的属性值。

下面是一些常用功能的事例代码.1.打开某个页面:web.Navigate(ExtractFilePath(Application.ExeName) + 'Template/login.html'); 2.取出页面中某个HtmlElement的Value属性值:function GetValueByElementName(web: TWebBrowser; elementName: string; index: integer): string;beginresult := (((web.Document as IHTMLDocument2).body.all as IHTMLElementCollection).item(elementName, index) as IHTMLInputElement).valueend;3.给HtmlElement设置Value属性procedure SetValueTextAreaName(web: TWebBrowser; elementName, value: string;index: integer);begin(((web.Document as IHTMLDocument2).body.all asIHTMLElementCollection).item(elementName, index) as IHTMLTextAreaElement).value := value;end;4.判断页面执行结果是否成功因为Web应用中如果出错的一般是采用错误页面的方式呈现给最终用户,所以我们也无法抓到Http错误,只能通过在webBeforeNavigate2事件中将URL参数记录到全局变量中, 然后在webDocumentComplete事件中根据URL参数和全局变量中的URL参数来判断执行结果是否正确.当然,这样需要将页面地址编码到代码中,降低了灵活性,但是这也是我能想到的唯一的方法,如果大家有什么好的方法,请告诉我哦.5.屏蔽鼠标右键和某些快捷键本功能需要在webBrowser的窗口中加入ApplicationEvents组件,设置它的OnMessage事件代码如下即可.procedure TwebAdapterForm.ApplicationEvents1Message(var Msg: tagMSG;var Handled: Boolean);const_KeyPressMask = $80000000;begin//禁用右键with Msg dobeginif not IsChild(web.Handle, hWnd) then Exit;Handled := (message = WM_RBUTTONDOWN) or (message = WM_RBUTTONUP) or (message = WM_CONTEXTMENU);end;//禁止Ctrl + N//禁止Ctrl + F//禁止Ctrl + Aif Msg.message = WM_KEYDOWN thenbeginif ((Msg.lParam and _KeyPressMask) = 0) and(GetKeyState(VK_Control) <0) and ((Msg.wParam = Ord('N'))or (Msg.wParam = Ord('F')) or (Msg.wParam = Ord('A'))) thenbeginHandled := True;end;end;end;6.在页面关闭的时候,同时关掉包含页面的VCL Form.(仅限 InternetExplorer 6.0)本功能需要卸载掉Delphi自带的 WebBrowser组件,安装ActionX组件(Microsoft Internet Controls V1.1),而且以后的程序只能运行在安装有Internet Explorer 6.0 的环境下.具体方法如下:在WebBrowser组件的OnWindowClosing事件中,输入self.close; 代码即可.如果需要阻止窗口的关闭, 设置CanClose参数的值为Flase.7.如何将页面中超链接新开的页面窗口包到指定的VCL窗口中.procedure TForm1.webNewWindow2(Sender: TObject; var ppDisp: IDispatch;var Cancel: WordBool);varform : TForm1;beginform := TForm1.Create(nil);ppDisp := form.web.DefaultDispatch;form.Show;end;8.在WebBrowser加载html页面完成后,在页面顶端插入HTML代码, 下面两种方式斗可以.{1. ----------------------------------------------------------------} procedure TForm1.Button1Click(Sender: TObject);varRange: IHTMLTxtRange;beginRange := ((WebBrowser1.Document as IHTMLDocument2).body as IHTMLBodyElement).createTextRange;Range.collapse(False);Range.pasteHTML('<br/><b>Hello!</b>');end;{2. ----------------------------------------------------------------} procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;const pDisp: IDispatch; var URL: OleVariant);varWebDoc: HTMLDocument;WebBody: HTMLBody;beginWebDoc := WebBrowser1.Document as HTMLDocument;WebBody := WebDoc.body as HTMLBody;WebBody.insertAdjacentHTML('BeforeEnd', '<h1>Hello World!</h1>');end;9.将页面中显示的内容全部选中,然后粘贴到Word文档中.WebBrowser1.ExecWB(OLECMDID_SELECTALL, OLECMDEXECOPT_DODEFAULT);//全选网页WebBrowser1.ExecWB(OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT); //复制网页WordDocu.Range.Paste; //word文档粘贴WebBrowser1.ExecWB(OLECMDID_UNDO, OLECMDEXECOPT_DODEFAULT); //取消全选注:WebBrowser的Document属性值和WordDocument的Document属性值必须都不为nil. 10.如何解决网页不响应回车事件public{ Public declarations }procedure MsgHandle(var Msg :TMsg; var Handled :Boolean);end;varForm1: TForm1;FOleInPlaceActiveObject :IOleInPlaceActiveObject;implementation{$R *.DFM}procedure TForm1.MsgHandle(var Msg :TMsg; var Handled :Boolean);variOIPAO :IOleInPlaceActiveObject;Dispatch :IDispatch;beginif WebBrowser1 =nil thenbeginHandled :=False;Exit;end;Handled :=(IsDialogMessage(WebBrowser1.Handle, Msg) =True);if (Handled) and (not WebBrowser1.Busy) thenbeginif FOleInPlaceActiveObject =nil thenbeginDispatch :=WebBrowser1.Application;if Dispatch <>nil thenbeginDispatch.QueryInterface(IOleInPlaceActiveObject, iOIPAO);if iOIPAO <>nil thenFOleInPlaceActiveObject :=iOIPAO;end;end;end;if FOleInPlaceActiveObject <>nil thenif ((Msg.message =WM_KEYDOWN) or (Msg.Message =WM_KEYUP)) and ((Msg.wParam =VK_BACK) or (Msg.wParam =VK_LEFT) or (Msg.wParam =VK_RIGHT)) thenelseFOleInPlaceActiveObject.TranslateAccelerator(Msg);end;procedure TForm1.FormCreate(Sender: TObject);beginApplication.OnMessage :=MsgHandle;end;procedure TForm1.FormDestroy(Sender: TObject);beginFOleInPlaceActiveObject :=nil;end;11.如何在WebBrowser中调用当前页面中的javascript函数SayHello()WebBrowser1.OleObject.Document.parentWindow.execScript('SayHello()', 'javascript');//or(WebBrowser1.Document as IHTMLDocument2).parentWindow.execScript('SayHello()', 'javascript')//orwebrowser1.document.script.SayHello();delphi中Webbrowser的使用技巧1.获取网页中变量的值例如:htm中<script> var currIDS=123</script>程序中可以这样调用 id :=Form1.WebBrowser1.OleObject.Document.script.currIDS备注:变量可以是javascript定义的,也可以是vbscript定义的,如果Webbrowser1中找不到该变量,调用会触发一个异常事件,即变量currIDS不存在。

delphi中TWebBrowser的常见属性、方法和使用技巧

delphi中TWebBrowser的常见属性、方法和使用技巧

delphi中TWebBrowser的常见属性、方法和使用技巧一、常见属性、方法GoBack:方法,后退到上一个页面。

GoForward:方法,前进到下一个页面。

GoHome:方法,调用默认的主页页面,该页面在IE的选项中设定。

GoSearch:方法,调用默认的搜索页面,该页面在IE的选项中设定。

Refresh:方法,刷新当前页面。

Stop:方法,停止调用或打开当前页面。

LocationName:属性(WideString),当前位置的名称。

LocationURL:属性(WideString),当前位置的URL。

Busy: 属性(Boolean),是否正忙。

Visible: 属性(Boolean),浏览器窗口是否可见。

(以下属性为在TWebBrowser新增,TWebBrowser_V1中没有,其作用有待探索)StatusBar: 属性(Boolean),是否显示状态栏。

StatusText: 属性(WideString),状态栏内容。

ToolBar: 属性(SYSINT),工具栏中的内容。

MenuBar: 属性(Boolean),是否显示菜单条。

FullScreen: 属性(Boolean),是否全屏显示。

Offline: 属性(Boolean),是否脱机浏览。

AddressBar: 属性(Boolean),是否显示地址栏。

Navigate(const URL: WideString;var Flags, TargetFrameName, PostData, Headers: OleVariant):方法,调用指定页面具体参数如下:URL:指定页面的URL。

Flags:Word类型,作用还不清楚,可设为0。

TargetFrameName:WideString打开页面所在的Frame,为空字符串时在当前的Frame中打开;TargetFrameName指定的Frame存在时在Frame中打开;TargetFrameName 指定的Frame不存在时则新建一个窗口打开,此时就相当于调用外部的IE浏览器了。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Delphi中WebBrowser控件详解实例
2008-10-18下午06:58
很久都没有原创了,前几天帮朋友做了个网址发布程序,主要应用到了WebBrowser控件。

今天主要给大家演示一下过程,让大家学习一下Delphi工具。

WebBrowser功能:
1。

自动加载网页
2。

去除WebBrowser滚动条
3。

WebBrowser自身打开页面
4。

禁止右键
1。

首先,新建一个FROM窗体:
2。

加入一个WEBBROWSER控件
3。

调整后如下:
4.这样一个webbrowser就完成了,下一步我们来让程序打开后自动加载一个网页。

核心代码:WebBrowser1.Navigate('');
双击窗体灰色处,对窗体进行初始化,在代码窗口中输入(Begin与End间输入核心代码):
procedure TForm1.FormCreate(Sender:TObject);
begin
WebBrowser1.Navigate('');//窗体初始化完成WEBBROWSER加载一个网页end;
5。

下面我们来实现禁止WEBBROWSER控件的滚动条功能:
核心代码:WebBrowser1.oleobject.Document.body.Scroll:=‘no’;
利用这个代码去掉滚动条的前提是webbrowser中必须有打开的网页,也就是在网页加载完完毕后再去掉滚动条。

所以首先要判断页面是否加载完毕,如果加载完毕,就执行上面的语句
去掉滚动条。

这时就要引入一个按扭控件来触发程序
加入SPEEDBUTTEN
调整形后:
好了,现在可以实现禁止滚动条的功能了:
第一步:在WebBrowser1DocumentComplete事件中置一个标志tag:=1(代表加载完毕)单击WEBBROWSER控件,在WebBrowser属性
的EVENS事件中找到WebBrowser1DocumentComplete(双击)
然后在代码窗口中输入:
procedure TForm1.WebBrowser1DocumentComplete(Sender:TObject;
const pDisp:IDispatch;var URL:OleVariant);
begin
tag:=1;//去掉Webbrowser1滚动条的标志
end;
对SpeedButten控件操作:(双击onClick)
加入如下代码:
procedure TForm1.SpeedButton1Click(Sender:TObject);
var
Doc:IHTMLDocument2;
begin
tag:=0;//去掉Webbrowser1滚动条的标志
WebBrowser1.Navigate2(’’);
while(tag=0)do Application.ProcessMessages;
WebBrowser1.oleobject.Document.body.Scroll:=‘no’;
end;
注意:使用前必须在uses中加入mshtml;
这样WebBrowser就禁止了滚动条。

主要应用到了IHTMLDocument2。

6。

让Webbrowser中的链接点击时在自身窗口打开:(单击WebBrowser控件,属性中的EVENS事件,双击NewWindow2)
代码窗口中输入:
procedure TForm1.WebBrowser1NewWindow2(Sender:TObject;var ppDisp:IDispatch; var Cancel:WordBool);
begin
//將新視窗在自身開啟
ppdisp:=webBrowser1.Application;
end;
7。

最后是禁用WebBrowser中的右键功能,放一个ApplicationEvents控件:
ApplicationEvents控件属性Evens事件中双击Onmessage:在代码窗口中输入:
procedure TForm1.ApplicationEvents1Message(var Msg:tagMSG;
var Handled:Boolean);
begin
if(Msg.message=wm_rbuttondown)or(Msg.message=wm_rbuttonup)or (msg.message=WM_RBUTTONDBLCLK)then
begin
if IsChild(Webbrowser1.Handle,Msg.hwnd)then
Handled:=true;
end;
end;
到此完成对程序的制作,调试
去滚动条后:
--------------------------------------------------------
===================================
unit Unit1;
interface
uses
Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms, Dialogs,StdCtrls,OleCtrls,SHDocVw,mshtml,AppEvnts;
type
TForm1=class(TForm)
WebBrowser1:TWebBrowser;
Button1:TButton;
ApplicationEvents1:TApplicationEvents;
procedure WebBrowser1DocumentComplete(Sender:TObject;
const pDisp:IDispatch;var URL:OleVariant);
procedure Button1Click(Sender:TObject);
procedure ApplicationEvents1Message(var Msg:tagMSG;
var Handled:Boolean);
private
{Private declarations}
public
{Public declarations}
end;
var
Form1:TForm1;
implementation
{$R*.dfm}
procedure TForm1.WebBrowser1DocumentComplete(Sender:TObject;
const pDisp:IDispatch;var URL:OleVariant);
begin
tag:=1;
end;
procedure TForm1.Button1Click(Sender:TObject);
var
a:IHTMLDocument2;
begin
tag:=0;
WebBrowser1.Navigate('');
while(tag=0)do Application.ProcessMessages;
WebBrowser1.oleobject.Document.body.Scroll:='no';
a:=WebBrowser1.Document as IHTMLDocument2;
a.Get_ParentWindow.ScrollBy(0,20);
end;
procedure TForm1.ApplicationEvents1Message(var Msg:tagMSG;
var Handled:Boolean);
begin
if(Msg.message=wm_rbuttondown)or(Msg.message=wm_rbuttonup)or (msg.message=WM_RBUTTONDBLCLK)then
begin
if IsChild(Webbrowser1.Handle,Msg.hwnd)then
Handled:=true;
end;
end; end.。

相关文档
最新文档