用Delphi动态改变页面内容

    使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值