用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="            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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值