TechnoFantasy(www.applevb.com) 给你的回答已经解决了这个问题。我这里稍微改动了一下他给的例子(MSDN里有),你可以看看。
1、创建一个form,名为Form1,在上面放置Text1和WebBrowser1,代码如下:
Option ExplicitPublic Sub Some_Procedure()
  Static intCount As Integer
  intCount = intCount + 1
  Text1.Text = "你点击了按钮 " & intCount & " 次。"
  WebBrowser1.Document.Title = Text1.Text
End SubPublic Sub lnkTestMouseOver()
  Text1.Text = "lnkTest_OnMouseOver"
  WebBrowser1.Document.Title = Text1.Text
End SubPublic Sub ShowHTML()
  MsgBox WebBrowser1.Document.body.innerHTML, vbOKOnly, WebBrowser1.Document.Title
End SubPrivate Sub Form_Load()
  '下载空页面
  WebBrowser1.Navigate2 "about:blank"
End SubPrivate Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
  '建立事件响应类
  Dim cfForward As clsForward
  
  '定义在浏览器中显示的HTML代码,其中包含一个按钮btnMyButton
  Dim sHTML As String
  sHTML = "<P>This is some text.</P>"
  sHTML = sHTML & "<P>And here is a button.</P>"
  sHTML = sHTML & "<BUTTON ID=btnMyButton>"
  sHTML = sHTML & "Click this button.</BUTTON>"
  sHTML = sHTML & "<P><a ID='lnkTest' class='nickname'>Here is a link.</a></P>"
  sHTML = sHTML & "<BUTTON ID=btnShowHTML>"
  sHTML = sHTML & "Show HTML of body.</BUTTON>"
  sHTML = sHTML & "</body></html>"
  
  '将HTML代码写入浏览器
  WebBrowser1.Document.body.innerHTML = sHTML
  
  '将事件响应类连接到页面的按钮btnMyButton上
  Set cfForward = New clsForward
  cfForward.Set_Destination Me, "Some_Procedure"
  WebBrowser1.Document.All("btnMyButton").onclick = cfForward
  
  '加入一个新的绑定
  Dim objEvent As clsForward
  Set objEvent = New clsForward
  objEvent.Set_Destination Me, "lnkTestMouseOver"
  WebBrowser1.Document.All("lnkTest").onmouseover = objEvent
  
  '再加入一个新的绑定
  Dim objEventShowBody As clsForward
  Set objEventShowBody = New clsForward
  objEventShowBody.Set_Destination Me, "ShowHTML"
  WebBrowser1.Document.All("btnShowHTML").onclick = objEventShowBody
  
End SubPrivate Sub WebBrowser1_TitleChange(ByVal Text As String)
  Me.Caption = WebBrowser1.Document.Title
End Sub2、创建一个class,名为 clsForward,代码如下:
Option ExplicitDim oObject As Object
Dim sMethod As String
Dim bInstantiated As BooleanPrivate Sub Class_Initialize()
  bInstantiated = False
End SubPublic Sub Set_Destination(oInObject As Object, sInMethod As String)
  Set oObject = oInObject
  sMethod = sInMethod
  bInstantiated = True
End SubPublic Sub My_Default_Method()
  If bInstantiated Then
    CallByName oObject, sMethod, VbMethod
  End If
End Sub3、将 My_Default_Method 设置为默认该class的方法运行。

解决方案 »

  1.   

    上面的例子中除了css,其它要求都能实现。我试图将css引用加入到<head>中,但是失败了,因为 WebBrowser1.Document.body.innerHTML 的内容是body的内容。
    如果用WebBrowser1.Document.all(1) 可以看到tagName的确是"HTML",也可以用同样的方法得到<Head>,但是无法对其innerHTML赋值。
    我试图用Set WebBrowser1.Document.all(intIndex) = objHTMLHeadElement
    方式改变Head值也失败了。
    可以更改 ShowHTML 过程察看DHTML的内容:
    Public Sub ShowHTML()
      MsgBox WebBrowser1.Document.body.innerHTML, vbOKOnly, WebBrowser1.Document.Title
      Dim objTag
      For Each objTag In WebBrowser1.Document.All
        '循环输出所有的 tag
        Debug.Print objTag.tagName & " :" & objTag.innerHTML
      Next
    End Sub
    呵呵,后来想起还有个 MSHTML 组件,可以查阅一下 HTML 的DOM 文档模型,在 HTMLDocument 中找到一个方法 createStyleSheet,这样,只需要在程序中加入:
    WebBrowser1.Document.createStyleSheet "http://www.csdn.net/Menu/Expert_style.css"
    这样的代码就能载入css了。好了,我们对上面的例子改动一下 showHTML 方法:
    Public Sub ShowHTML()
      '这里动态载入一个 css ,呵呵
      Call WebBrowser1.Document.createStyleSheet("http://www.csdn.net/Menu/Expert_style.css")
      
      MsgBox WebBrowser1.Document.body.innerHTML, vbOKOnly, WebBrowser1.Document.Title
      Dim objTag
      For Each objTag In WebBrowser1.Document.All
        If objTag.tagName = "HTML" Then
          Debug.Print objTag.tagName & " :" & objTag.innerHTML
        End If
        If objTag.tagName = "STYLE" Then
          'objTag.innerHTML = "test"
          MsgBox objTag.innerHTML
        End If
      Next
      '程序开始的时候html里面对<a>的class设置不合适,我们在这里改改看看
      WebBrowser1.Document.All("lnkTest").className = "top"
      '好了,看看你的程序执行界面的WebBrowser1
    End Sub
      

  2.   

    注意 innerHTML、tagName、className 的大小写习惯(有点像java风格)。
    现在的例子中,刚开始的时候载入一个空页面,然后动态添加HTML。当你按下第一个按钮的时候,改变WebBrowser1的标题,同时引发OnTitleChanged事件,改变Form1的标题。
    当你按下第二个按钮,显示body的innerHTML之后,页面中的连接<a>的样式表发生改变,并在debug输出<HTML>的内容。按照例子改改,你想要做什么都可以咯
    hehe 分来。另外,不知道是不是可以通过
    Dim objHTMLElement as New HTMLHeadElement
    Set WebBrowser1.Document.All(intIndex) = objHTMLElement
    这样的方式来改变一个元素(如head),没有继续进行测试。
      

  3.   

    这个问题的性质是这样的:把HTML元素直接放在Form上,而不是通过WebBrowser。比如定义出来的IMG元素,直接放在Form上。
      

  4.   

    遗憾的是Form上不支持显示HTML
    把WebBrowser平铺呢?
      

  5.   

    Form不是HTML容器,只能用WebBrowser这样容器咯 x(
      

  6.   

    给你满意的答复:http://caotang.myetang.com/temp/htmllabel.zip
      

  7.   

    哦,不是满意,应该是60%满意,呵呵,因为他不支持css
      

  8.   

    牛大了...
    佩服得五体投地...
    一定是微软的vb枪手...他的程序用shellexcute打开url
    然后用bitblt在PicBox中绘图!!!
    没调用WebBrowser来显示,没调用MSHTML来解析HTML,怪不得速度稍微有点慢,毕竟用vb做的,真是厉害!!!
    估计不仅不支持CSS,还有Script支持也有问题(要实现这么多东西够麻烦的咯)。可以考虑调用ActiveScript加入对VBScript JavaScript JScript 和其它脚本支持。呵呵,佩服佩服,强烈推荐所有玩vb的朋友都看看。
    不过,就此问题来说,这个方法还不如用WebBrowser呢,有什么差别呢?在WebBrowser里面放一个Frame就有可以拖动调整大小的split了,而且可以动态改变属性,不也一样么?
    Document.createStyleSheet 方法不仅可以在Script中用,在WebBrowser中也可以载入一个css,呵呵,这样满足 90%了,因为它毕竟还是个control,不是form自己能够办到的。
    还是用WebBrowser平铺Form吧。to enmity : 期待有更为惊奇的事情发生 ...  还有更震撼的东东么?
      

  9.   

    to:joyplay(想吃老虎的小猪) :)兄弟,看你对这个程序这么有研究,想必,你的水平还可以嘛。不过,我1999年来这里到现在,只是最近看见过你,而且,你只有1个三角,代表你是最近来的,而且,尽管你回复积极,不过,往往不能拿高分,所以......使用ShellExecute,并不是为了什么,纯粹是因为运行用户单击连接后调用IE而且,控件本身并没有利用其它控件,如Script Control,也没有跟IE相关的TypeLibrary,如MSHTML,原本版本相对解释速度会快点,因为这个版本增加了一些新特性,解释起来就慢了点。对,我本人在毕业设计中就用WebBrowser,因为相比WB,HTMLLabel不能支持的特性很多。更震撼的?多着呢:)
      

  10.   

    to:KiteGirl(小仙妹) 其实,利用MSHTML和WebBrowser,完全能够做得出你想要的效果,关键在前者。
      

  11.   

    to:Mike_sun(漠风) 兄弟好吖!!!
      

  12.   

    to enmity(灵感之源)hehe
    你好呀! 工作还顺心吗?
      

  13.   

    to;Mike_sun(漠风)   还好吧!你呢?
      

  14.   

    to enmity(灵感之源) 
    你好 
    呵呵,我到现在不知道这里的规则什么的,最近一周在做项目验收的准备工作,下周开始要加入r&d做atl,这几天都在写项目文档,比较闷,就来这里玩咯。
    我账号注册的早,但没怎么来。我记得csdn最早在东方网景吧,当时csdn出来前我和朋友想自己做一个也叫csdn。可惜那时候参加了教授的项目,外加自己水平也低,一堆人吵吵嚷嚷一事无成(人多主意多,反而没有核心),最后眼睁睁看着csdn做起来了,呵呵,也好。
    上个月看到csdn的论坛和以前我们做的专家系统非常像,所以来看看,没想到赖上了,虎虎。
    你的那颗星星是红颜色,是不是比5个三角还高?IE5的时候用BandBar做过Chat(就是把icq功能做到ie插件),所以曾经用心看过IE相关的东西。见到那个 HTMLLabel 最让我佩服的是,能不采用oop设计方法,不先建立一个mshtml这样的DOM对象模型结构,就能“生”做出这样的效果,实现这么多的tag效果,已然极为佩服:想必作者coding能力和coding控制能力都很强了!按照他这样的做法,css什么的只是代码量问题,script就需要另外实现了。到时候加入了css和script,要想在现在的代码上更进一步,就不可能了——勿在浮沙筑高台,尽管如此,已然太佩服了。
    期待你的震撼的东东。今天在学习消化 AdamBear 的东西,也很不错。
      

  15.   

    to:joyplay(想吃老虎的小猪)    其实这个enmity ID这是我在csdn的第n个而已,正确点来说,是第n的时期的id,而且还有来历的。如果各位还有印象的话,去年(2001)年5月底,曾经有一场木马风波,我就是在那次之后换id的。   呵呵,咱们都有相似的经历吖,中学时代(1996年)开始写程序,中间走了不少崎岖的道路,也曾经为网站疯狂过,耗费了1年多的时间去做了一个有规模的网站,后来作废了。   我也曾经做过IE插件,类似IE左边的收藏夹(我的毕业设计中也应用到了),ToolBar、菜单和右健快捷菜单中都可控制。   嗯,HTMLLabel很多特性都是后来不断加上去的,譬如,上2个版本还不支持图片呢。   对,如果在原来的代码基础上再加script,有点不实际,应该单独出来。不过,你也会注意到程序与网页之间的交互,这是一个雏形。   AdamBear 网友对VB和VC都有一定的研究,可以从他那里学到不少东西。   对,红星比绿色三角的等级高,这是根据专家分来区分的。你可以参考一下相关说明。
      

  16.   

    有兴趣的话,可以看一下我的毕业设计最新UI(不断改进中),其中就应用了WebBrowser,正确来说,应该是整个程序是基于网页的:http://caotang.myetang.com/temp/splash.jpg
    http://caotang.myetang.com/temp/main.jpg
    http://caotang.myetang.com/temp/e1.jpg
    http://caotang.myetang.com/temp/e2.jpg
    http://caotang.myetang.com/temp/e3.gif
    http://caotang.myetang.com/temp/e4.jpg
    http://caotang.myetang.com/temp/e5.jpg
    http://caotang.myetang.com/temp/e6.gif
    http://caotang.myetang.com/temp/e7.jpg
    http://caotang.myetang.com/temp/e8.jpg
      

  17.   

    全部是替代方案,HTML元素绝对不能直接放在Form上,一个古怪的问题
      

  18.   

    Form不是HTML容器,Form就没设计成能解释并显示HTML,呵呵
    所以全都是替代方案。
      

  19.   

    enmity 看到了,你用vc/cbc/delphi/vb做的?
    漂亮的neoplanet风格!
    佩服你真有心做这么细致,我就没这机会咯,工作太乱。
    :)
      

  20.   

    to:joyplay(想吃老虎的小猪) 纯VB,不使用第三方控件。
      

  21.   

    什么时候毕业?工作打算如何?VC 熟悉么?
    呵呵,VB能做到这个程度,表明你对程序的设计和开发控制的把握能力已经很不错了 :)
    我93年底开始写c,呵呵,那时候电脑报好像刚开始试刊。DOS下没什么可玩的,就写过小汉字系统,自己写图形函数库,还“敢”设计“Windows”,呵呵,还对游戏特别感兴趣。96年上大学之后反而少有机会接触网络,中间断开了两年跟教授的设计,给班主任的公司打工去了。所以到现在我比较看重设计能力,技术细节上日新月异变化太快了,跟不上的说,呵呵。
    真是佩服,能做到像你这样,还有htmlable的作者那样即便用vb都能这么细致按部就班的实现目标的,的确需要几年的思索和积累才可能做到。而现在大部分“程序员”都很浮躁,学半年就“会”了,一工作就只想着买房买车了,干三个月就想换公司了,写两年就“累”了... 
    的确很佩服 :)
      

  22.   

    to:joyplay(想吃老虎的小猪)   第一专业今年毕业,第二专业是下年的事情了。其实我出来工作2个多月了。   对VC不熟吖,现在重新学C++,觉得它是一个新的语言,呵呵。 我95-97年间在DOS下,用QuickBasic写了一个支持汉字、鼠标、图片、动画、音乐等等的X Windows,提取UCDOS的拼音输入法码表,自己还做了一个输入法。因为用汇编做了一个XVGA运行库,所以可以调用显卡所支持的辨别率和颜色,其它的小工具,教育软件不胜枚举,先在回想起来当时不分昼夜地狂写代码,往往通宵达旦,都觉得是自己是个疯子。
      

  23.   

    to:joyplay(想吃老虎的小猪)    刚才粗略数了一下,Quick Basic文件超过了1000个了,代码也大概算了一下,超过70万行了。呵呵,一个疯子。
      

  24.   

    现在才发现图片地址错了,现在更正:
    http://caotang.myetang.com/temp/splash.jpg
    http://caotang.myetang.com/temp/main.jpg
    http://caotang.myetang.com/temp/e1.jpg
    http://caotang.myetang.com/temp/e2.jpg
    http://caotang.myetang.com/temp/e3.jpg
    http://caotang.myetang.com/temp/e4.jpg
    http://caotang.myetang.com/temp/e5.jpg
    http://caotang.myetang.com/temp/e6.jpg
    http://caotang.myetang.com/temp/e7.jpg
    http://caotang.myetang.com/temp/e8.jpg
      

  25.   


    如果不能直接访问,可以通过下面的地址查看我的毕业设计最新UI:http://caotang.myetang.com/temp/index.html
      

  26.   

    我问一下如果相发EMAIL给作者要怎么做??