DELPHI 中WEBBROWSER控件详解实例
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做简单的网页浏览器
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数据和取得网页源文件
如果能够成功的连接返回 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浏览器的各种控制
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界面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的使用方法详解(五)/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是一种强大的组件,可以嵌入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控件详解实例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里的组件?先取出对应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的各种用法 获得网页中变量值
注意:使用前必须在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的使用技巧汇总
屏蔽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组件使用详解该组件是一个浏览器组件,可以显示一个指定地址的网页、设置网页打开时的主页以及对网页进行相关的操作,同时也可以对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 是一款基于 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是一个流行的编程语言和集成开发环境(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的使用方法详解(四)
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组件编写
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的使用技巧
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的常见属性、方法和使用技巧一、常见属性、方法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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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.。