使用TWebBrowser组件可以直接显示网页的内容, 因此在用delphi开发程序时,我们可以使用TWebBrowser来展示一些数据,获得更美观专业的效果,提高应用程序的挡次。 通常的做法时,做一些静态的页面,TWebBrowser装载这些页面后,再通过delphi填写数据。故需要用到的技 术就是如何通过delphi读取或者控制TWebBrowser中内容。其实TWebBrowser就是一个ActiveX控件的封装,由此可以预见,对TWebBrowser的控制是非常简单的事情。
以下是获取页面元素及内容的代码: //有关页面操作的变量定义全部在MsHtml中,别忘了uses MsHtml var doc:IHTMLDocument2; win:IHTMLWindow2; Dispatch:IDispatch; el:IHTMLElement; begin doc2 := WBrowser.Document as IHTMLDocument2; //获取页面的文档对象 el := doc2.getElementById('zjgnpanel'); //通过ID获取页面元素 label1Caption := el.innerHTML; //这就是元素所包含的内容 el.innerHTML := '元素的新内容'; //这样就可以设置元素的新内容
{不同页面元素有不同的属性和方法,这些知识可以参考其它文挡,或者直接阅读MsHtml中的代码 例如,如果是Input元素,可以通过value属性获取或者设置它的值}
//对于含有框架的页面稍微麻烦点 doc2 := WBrowser.Document as IHTMLDocument2; //获取页面总文档对象 Dispatch := doc2.frames.item('leftFrame'); //通过名称获取框架接口 Dispatch.QueryInterface(IhtmlWindow2,win2); //获取框架的窗口对象 doc3 := win2.Document as IHTMLDocument3; //获取框架的文档对象 el := doc2.getElementById('zjgnpanel'); //通过ID获取页面元素 ...... end;
以下是一个应用程序中,在页面的左边矿架中显示当前操作员最近几次使用的功能代码片段: ...... doc2 := WBrowser.Document as IHTMLDocument2; Dispatch := doc2.frames.item('leftFrame'); Dispatch.QueryInterface(IhtmlWindow2,win2); doc3 := win2.Document as IHTMLDocument3;
sHtml:=''; //下面的代码根据数据集的内容构造HTML文本 while not cdsMenu.Eof do begin sHtml:=sHtml+ '<div style="border:0px solid #5c77d7; margin:1px 1px 0px 1px; padding:2px 0px 0px 2px">'+ ' <img align="absmiddle" src="i_drafts.gif">'+ ' <a href="http://FUN'+cdsMenu.FieldByName('FUN_ID').AsString+ '" style="color:#dddddd;cursor:hand;font-size:12px;" onMouseOver="doMouseOver(this);" onMouseOut="doMouseOut(this);" onClick="">'+ cdsMenu.FieldByName('FUN_NAME').AsString+ '</a></div>'; cdsMenu.Next; end;
el := doc3.getElementById('zjgnpanel'); el.innerHTML := sHtml; //把HTML文本设置到页面中显示 ......
如果想通过点击页面的连接来打开程序的功能,需要响应TWebBrowser的OnBeforeNavigate2事件, 下面是示例: procedure TMainForm.WBrowserBeforeNavigate2(Sender: TObject; const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool); var pURL:String; k,j:Integer; begin pURL:=URL; //URL是点击链接后,TWebBrowser需要访问的下个地址,因此对于通过分析地址来决定调用那些功能 pURL:=UpperCase(ExtractFileName(pURL)); pURL:=Trim(StringReplace(pURL,'/',' ',[rfReplaceAll])); //地址可能包含有//,把它替换掉
k := Pos('FUN',pURL); //如果地址中包含特别的字符串,本例子中为FUN,表示是需要打开功能链接 if k > 0 then begin Cancel:=True; {Cancel设置为True,告诉TWebBrowser,此链接有特别用处,TWebBrowser不需要 再去获取pURL页面} pURL:=Copy(pURL,k+3,Length(pURL)-k-2); //去掉FUN,后面的内容就是功能标识 CallHytEx(pURL,Handle); //函数CallHytEx根据pURL打开不同的功能 end; end;
该文章转载自网络大本营:http://www.xrss.cn/Dev/Delphi/200832718915.Html