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、创建一个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的方法运行。
如果用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
现在的例子中,刚开始的时候载入一个空页面,然后动态添加HTML。当你按下第一个按钮的时候,改变WebBrowser1的标题,同时引发OnTitleChanged事件,改变Form1的标题。
当你按下第二个按钮,显示body的innerHTML之后,页面中的连接<a>的样式表发生改变,并在debug输出<HTML>的内容。按照例子改改,你想要做什么都可以咯
hehe 分来。另外,不知道是不是可以通过
Dim objHTMLElement as New HTMLHeadElement
Set WebBrowser1.Document.All(intIndex) = objHTMLElement
这样的方式来改变一个元素(如head),没有继续进行测试。
把WebBrowser平铺呢?
佩服得五体投地...
一定是微软的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 : 期待有更为惊奇的事情发生 ... 还有更震撼的东东么?
你好呀! 工作还顺心吗?
你好
呵呵,我到现在不知道这里的规则什么的,最近一周在做项目验收的准备工作,下周开始要加入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 的东西,也很不错。
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
所以全都是替代方案。
漂亮的neoplanet风格!
佩服你真有心做这么细致,我就没这机会咯,工作太乱。
:)
呵呵,VB能做到这个程度,表明你对程序的设计和开发控制的把握能力已经很不错了 :)
我93年底开始写c,呵呵,那时候电脑报好像刚开始试刊。DOS下没什么可玩的,就写过小汉字系统,自己写图形函数库,还“敢”设计“Windows”,呵呵,还对游戏特别感兴趣。96年上大学之后反而少有机会接触网络,中间断开了两年跟教授的设计,给班主任的公司打工去了。所以到现在我比较看重设计能力,技术细节上日新月异变化太快了,跟不上的说,呵呵。
真是佩服,能做到像你这样,还有htmlable的作者那样即便用vb都能这么细致按部就班的实现目标的,的确需要几年的思索和积累才可能做到。而现在大部分“程序员”都很浮躁,学半年就“会”了,一工作就只想着买房买车了,干三个月就想换公司了,写两年就“累”了...
的确很佩服 :)
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
如果不能直接访问,可以通过下面的地址查看我的毕业设计最新UI:http://caotang.myetang.com/temp/index.html