当前位置:首页 > Windows程序 > 正文

Delphi实现HTMLWebBrowser实现HTML界面

2021-03-27 Windows程序

HTML的界面有以下特点:图文混排,格式灵活,可以包含Flash、声音和视频等,实现图文声像的多媒体界面,而且易于建立和维护。另外,HTML的显示环境一般机器上都具备,通常不需要安装额外的软件。当然,HTML界面也有它欠缺的方面,即:界面控制能力有限,代码调试不便----虽然DHTML提供了比较强的编程特性,但是比起Delphi的传统的开发语言和工具来,对界面的控制能力,尤其是和数据交互时的控制能力还是稍逊一筹。 
了解了这些特点,我们就可以在实际应用开发中,适时地选择HTML技术。下面举个例子: 
一种仪器的管理程序,,需要显示该仪器的操作方法文档,包含文字和图片,并要求可以隐藏或显示文档,并能安要求打印。 
这个应用中,图文显示、隐藏/显示部分文档、图文打印等需求,都是HTML界面所擅长的,用传统的表单控件实现几乎无法想像。 
  
用什么实现HTML的界面 
用Delphi实现HTML界面的应用主要有两种选择:WebBrowser Control或MSHTML。为了弄清两者如何选择,我们先来看看Internet Exporer 4.0及其后续版本的体系结构: 
" 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。MSHTML.DLL是实行HTML解析和表现的组件。它通过DHTML对象模型提供对HTML文档的访问。它实现了活动文档服务器接口,可以通过COM接口调用。 
不难看出,WebBrowser在比较高的层次上,提供了更为丰富的功能,因此一般通常编程都采用WebBrower控件。MSHTML只有在需要解析HTML这样的特殊应用中,才推荐使用。微软的MSDN网站上提供了一个使用MSHTML的例子:WalkAll‘>">WalkAll Sample Source Page。 
(*注:In-place链接,是指点击HTML连接时,在相同的WebBrowser实例中显示连接的HTML文档。如果仅使用MSHTML.DLL,点击链接将导致在新的浏览器实例中打开链接的文档。) 
  
如何访问HTML页面的内容 
首先,在Delphi 7.0组件面板的Internet页上,把TWebBrowser组件放到表单上。 
通过执行以下语句装载HTML文档到WebBrowser中进行显示: 
WebBrowser1.Navigate(GetCurrentDir + ‘\index.htm‘); 
隐藏/显示HTML元件代码示例: 

 Pascal Code 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

     

procedure xx();
var 
Doc : IHTMLDocument2; 
element: IHTMLElement; 
begin 
Doc := IHTMLDocument2(WebBrowser1.Document); 
if nil <> Doc then 
begin 
    element := Doc.all.item(‘T1‘, 0) as IHTMLElement; 
    if nil <> element then 
    begin 
        if ‘‘ = element.style.display then 
        begin
            element.style.display := ‘none‘ 
            else 
            element.style.display := ‘‘; 
        end; 
    end; 
end; 

 

设置/取值代码示例: 
var 
         Doc : IHTMLDocument2; 
         inputText : IHTMLInputTextElement; 
     begin 
         Doc := IHTMLDocument2(WebBrowser1.Document); 
         if nil <> Doc then 
         begin 
             //如果T1不是IHTMLInputTextElement类型将出错 
             inputText := Doc.all.item(‘T1‘, 0) as IHTMLInputTextElement; 
             inputText.value := Edit1.Text; 
             Edit2.Text := inputText.value; 
         end; 
     end; 
提示:关于哪些HTML元件(标记)应该采用什么MSHTML接口进行访问,请参考MSDN Library中的Web Development > Programming and Reusing the Browser > MSHTML Reference > Interfaces and Scripting Objects。 
  
如何调用JavaScript函数(兼谈消息提示框) 
知道了访问HTML内容的方法,就可以通过间接方式调用HTML页面上包含的JavaScript代码。具体实现方式是:在HTML中插入<span></span>等不可见元件,利用它的click事件调用响应的JavaScript函数,然后再Delphi中调用该元件的click过程。 
下面我们就用Delphi调用JavaScript的alert函数来实现消息提示框。首先在HTML中加入: 
<span></span> 
Delphi中的调用代码如下: 

 Pascal Code 

1
2
3
4
5
6
7
8
9
10
11
12
13
14

     

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/68304.html