delphi中Webbrowser的使用技巧Word下载.docx

上传人:b****4 文档编号:7902278 上传时间:2023-05-09 格式:DOCX 页数:25 大小:30.83KB
下载 相关 举报
delphi中Webbrowser的使用技巧Word下载.docx_第1页
第1页 / 共25页
delphi中Webbrowser的使用技巧Word下载.docx_第2页
第2页 / 共25页
delphi中Webbrowser的使用技巧Word下载.docx_第3页
第3页 / 共25页
delphi中Webbrowser的使用技巧Word下载.docx_第4页
第4页 / 共25页
delphi中Webbrowser的使用技巧Word下载.docx_第5页
第5页 / 共25页
delphi中Webbrowser的使用技巧Word下载.docx_第6页
第6页 / 共25页
delphi中Webbrowser的使用技巧Word下载.docx_第7页
第7页 / 共25页
delphi中Webbrowser的使用技巧Word下载.docx_第8页
第8页 / 共25页
delphi中Webbrowser的使用技巧Word下载.docx_第9页
第9页 / 共25页
delphi中Webbrowser的使用技巧Word下载.docx_第10页
第10页 / 共25页
delphi中Webbrowser的使用技巧Word下载.docx_第11页
第11页 / 共25页
delphi中Webbrowser的使用技巧Word下载.docx_第12页
第12页 / 共25页
delphi中Webbrowser的使用技巧Word下载.docx_第13页
第13页 / 共25页
delphi中Webbrowser的使用技巧Word下载.docx_第14页
第14页 / 共25页
delphi中Webbrowser的使用技巧Word下载.docx_第15页
第15页 / 共25页
delphi中Webbrowser的使用技巧Word下载.docx_第16页
第16页 / 共25页
delphi中Webbrowser的使用技巧Word下载.docx_第17页
第17页 / 共25页
delphi中Webbrowser的使用技巧Word下载.docx_第18页
第18页 / 共25页
delphi中Webbrowser的使用技巧Word下载.docx_第19页
第19页 / 共25页
delphi中Webbrowser的使用技巧Word下载.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

delphi中Webbrowser的使用技巧Word下载.docx

《delphi中Webbrowser的使用技巧Word下载.docx》由会员分享,可在线阅读,更多相关《delphi中Webbrowser的使用技巧Word下载.docx(25页珍藏版)》请在冰点文库上搜索。

delphi中Webbrowser的使用技巧Word下载.docx

因为Web应用中如果出错的一般是采用错误页面的方式呈现给最终用户,所以我们也无法抓到Http错误,只能通过在webBeforeNavigate2事件中将URL参数记录到全局变量中,然后在webDocumentComplete事件中根据URL参数和全局变量中的URL参数来判断执行结果是否正确.当然,这样需要将页面地址编码到代码中,降低了灵活性,但是这也是我能想到的唯一的方法,如果大家有什么好的方法,请告诉我哦.

5.屏蔽鼠标右键和某些快捷键

本功能需要在webBrowser的窗口中加入ApplicationEvents组件,设置它的OnMessage事件代码如下即可.

procedureTwebAdapterForm.ApplicationEvents1Message(varMsg:

tagMSG;

varHandled:

Boolean);

const

_KeyPressMask=$80000000;

//禁用右键

withMsgdo

ifnotIsChild(web.Handle,hWnd)thenExit;

Handled:

=(message=WM_RBUTTONDOWN)or(message=WM_RBUTTONUP)or(message=WM_CONTEXTMENU);

//禁止Ctrl+N

//禁止Ctrl+F

//禁止Ctrl+A

ifMsg.message=WM_KEYDOWNthen

if((Msg.lParamand_KeyPressMask)=0)and

(GetKeyState(VK_Control)<

0)and((Msg.wParam=Ord('

N'

))

or(Msg.wParam=Ord('

F'

))or(Msg.wParam=Ord('

A'

)))then

=True;

6.在页面关闭的时候,同时关掉包含页面的VCLForm.(仅限InternetExplorer6.0)

本功能需要卸载掉Delphi自带的WebBrowser组件,安装ActionX组件(MicrosoftInternetControlsV1.1),而且以后的程序只能运行在安装有InternetExplorer6.0的环境下.具体方法如下:

在WebBrowser组件的OnWindowClosing事件中,输入self.close;

代码即可.如果需要阻止窗口的关闭,设置CanClose参数的值为Flase.

7.如何将页面中超链接新开的页面窗口包到指定的VCL窗口中.

procedureTForm1.webNewWindow2(Sender:

TObject;

varppDisp:

IDispatch;

varCancel:

WordBool);

var

form:

TForm1;

=TForm1.Create(nil);

ppDisp:

=form.web.DefaultDispatch;

form.Show;

8.在WebBrowser加载html页面完成后,在页面顶端插入HTML代码,下面两种方式斗可以.

{1.----------------------------------------------------------------}

procedureTForm1.Button1Click(Sender:

TObject);

var

Range:

IHTMLTxtRange;

begin

Range:

=((WebBrowser1.DocumentasIHTMLDocument2).bodyas

IHTMLBodyElement).createTextRange;

Range.collapse(False);

Range.pasteHTML('

<

br/>

b>

Hello!

/b>

'

{2.----------------------------------------------------------------}

procedureTForm1.WebBrowser1DocumentComplete(Sender:

constpDisp:

varURL:

OleVariant);

WebDoc:

HTMLDocument;

WebBody:

HTMLBody;

WebDoc:

=WebBrowser1.DocumentasHTMLDocument;

WebBody:

=WebDoc.bodyasHTMLBody;

WebBody.insertAdjacentHTML('

BeforeEnd'

'

h1>

HelloWorld!

/h1>

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

{Publicdeclarations}

procedureMsgHandle(varMsg:

TMsg;

varHandled:

Boolean);

Form1:

FOleInPlaceActiveObject:

IOleInPlaceActiveObject;

implementation

{$R*.DFM}

procedureTForm1.MsgHandle(varMsg:

iOIPAO:

Dispatch:

IDispatch;

ifWebBrowser1=nilthen

=False;

Exit;

=(IsDialogMessage(WebBrowser1.Handle,Msg)=True);

if(Handled)and(notWebBrowser1.Busy)then

ifFOleInPlaceActiveObject=nilthen

=WebBrowser1.Application;

ifDispatch<

>

nilthen

Dispatch.QueryInterface(IOleInPlaceActiveObject,iOIPAO);

ifiOIPAO<

=iOIPAO;

ifFOleInPlaceActiveObject<

if((Msg.message=WM_KEYDOWN)or(Msg.Message=WM_KEYUP))and((Msg.wParam=VK_BACK)or(Msg.wParam=VK_LEFT)or(Msg.wParam=VK_RIGHT))then

else

FOleInPlaceActiveObject.TranslateAccelerator(Msg);

procedureTForm1.FormCreate(Sender:

Application.OnMessage:

=MsgHandle;

procedureTForm1.FormDestroy(Sender:

=nil;

11.如何在WebBrowser中调用当前页面中的javascript函数SayHello()

WebBrowser1.OleObject.

Document.parentWindow.execScript('

SayHello()'

javascript'

//or

(WebBrowser1.DocumentasIHTMLDocument2

).parentWindow.execScript('

webrowser1.document.script.SayHello();

 

1.获取网页中变量的值

例如:

htm中<

script>

varcurrIDS=123<

/script>

程序中可以这样调用id:

=Form1.WebBrowser1.OleObject.Document.script.currIDS

备注:

变量可以是javascript定义的,也可以是vbscript定义的,如果Webbrowser1中找不到该变量,调用会触发一个异常事件,即变量currIDS不存在。

2.执行网页中的函数

tmpf:

='

currID=getNextID(currID)'

+#13#10;

Form1.WebBrowser1.OleObject.Document.parentWindow.execScript(tmpf,'

JavaScript'

调用函数的方法就是execScript接口,同样,如果函数不存在,或者运行错误也会触发脚本错误异常

3.设置网页背景

背景图片WebBrowser1.OleObject.Document.body.background 

:

;

背景颜色WebBrowser1.OleObject.Document.body.bgcolor 

#eeeeee'

4.调用网页中已知对象

src:

=WebBrowser1.OleObject.Document.getElementByID('

img1'

).src

该方法其实就是javascript中的getElementByID 

5.获取页面中所有的frame

使用DHTML。

frames:

=wb.OleObject.document.frames;

fori:

=0toframes.lengthdo

memo1.lines.Add(frames[i].document.body.innerHTML);

6.BorderStyle=bsNone后Webbrowser会被重新初始化

这是一个让人很意外的一个问题,Delphi在窗口控件的控制方面做得非常好,很少出现这种BUG

根据分析,出现这个现象有很多情况改变FormStyle也会出现;

如果 

webbrowser.parent 

由panel1 

改到panel2.也会导致webbrowser重新初始化。

7.直接向Webbrowser中写入html代码,不需要Navigate到实际存在的文件

var

StrStream:

TStringStream;

SetNoteStr:

begin

SetNoteStr:

='

bodybgcolor=222222align=center>

br>

palign=center>

fontsize=+2color=#FFFFFF>

点点博客<

/font>

/p>

=SetNoteStr+'

点击左边按钮可查看对应图片<

=TStringStream.Create(SetNoteStr);

WebBrowser1.Navigate('

about:

blank'

try

StrStream.Position:

=0;

(WebBrowser1.DocumentasIPersistStreamInit).Load(TStreamadapter.Create(StrStream));

finally

StrStream.Free;

end;

8.前进,后退,刷新

self.WebBrowser1.GoBack

self.WebBrowser1.GoForward

self.WebBrowser1.Refresh

9.捕捉NewWindow2事件,即新开窗口事件

procedureTForm1.WebBrowser1NewWindow2(Sender:

varCancel:

NewWindow:

TForm2;

//exit;

=TForm2.Create(nil);

NewWindow.Show;

ppDisp:

=NewWindow.Webbrowser1.DefaultDispatch;

值得一题的是该方法不能获得新开窗口的URL,退一步的方法只能是等到在新的Webbrowser中触发BeforeNavigate2事件判断了

10.网页中存在iframe时判断页面是否下载结束

procedureTForm1.WebBrowser1DocumentComplete(Sender:

constpDisp:

ifWebBrowser1.Application=pDispthenshowmessage('

页面已全部下载完毕'

每个iframe下载完毕都会触发DocumentComplete事件,所以一个页面在真正下载完毕前可能被触发多次

Delphi中使用WebBrowser控件中载入的页面的script

使用如下语句即可:

webrowser1.OleObject.document.script.doSomething(parameter);

在网上看到还可以如下使用,不过我没用过。

usesMSHTML;

//useIHTMLDocument2

procedureTForm1.BitBtn1Click(Sender:

 WebBrowser1.OleObject.

 //or

 (WebBrowser1.DocumentasIHTMLDocument2).parentWindow.execScript('

用WebBrowser实现HTML界面的应用

HTML的界面有以下特点:

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

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

当然,HTML界面也有它欠缺的方面,即:

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

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

下面举个例子:

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

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

用什么实现HTML的界面

用Delphi实现HTML界面的应用主要有两种选择:

WebBrowserControl或MSHTML。

为了弄清两者如何选择,我们先来看看InternetExporer4.0及其后续版本的体系结构:

IE浏览器是建立在SHDOCVW.DLL组件之上的,而SHDOCVW.DLL则建立在MSHTML.DLL组件之上,底层则包括脚本引擎等。

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

PlatformforInternetContentSelection)等功能。

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

MSHTML.DLL是实行HTML解析和表现的组件。

它通过DHTML对象模型提供对HTML文档的访问。

它实现了活动文档服务器接口,可以通过COM接口调用。

不难看出,WebBrowser在比较高的层次上,提供了更为丰富的功能,因此一般通常编程都采用WebBrower控件。

MSHTML只有在需要解析HTML这样的特殊应用中,才推荐使用。

微软的MSDN网站上提供了一个使用MSHTML的例子:

WalkAllSampleSourcePage。

(*注:

In-place链接,是指点击HTML连接时,在相同的WebBrowser实例中显示连接的HTML文档。

如果仅使用MSHTML.DLL,点击链接将导致在新的浏览器实例中打开链接的文档。

 

如何访问HTML页面的内容

首先,在Delphi7.0组件面板的Internet页上,把TWebBrowser组件放到表单上,并手动把MSHTML加入到Uses列表中。

通过执行以下语句装载HTML文档到WebBrowser中进行显示:

WebBrowser1.Navigate(GetCurrentDir+'

\index.htm'

隐藏/显示HTML元件代码示例:

Doc:

IHTMLDocument2;

element:

IHTMLElement;

=IHTMLDocument2(WebBrowser1.Document);

ifnil<

Docthen

element:

=Doc.all.item('

T1'

0)asIHTMLElement;

elementthenbegin

if'

=element.style.displaythen

element.style.display:

none'

else

elemen

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2