一些问答

 

 
发表于:2005-8-29 20:56:00
1

你好,请教你你个问题,希望指教。
你的代码太高深了,不要说菜鸟,就是一般高手也无法看明白啊。
你的程序让我看到几个很棒的东西,同时也是我请教的问题。也许我问的问题与你的程序并非一致,请见谅……
1、新窗口的问题。看你的代码是可以定义拦截自动弹出窗口的级别。那么在什么时候判断这个网页地址是否是广告呢?查资料:
Private WithEvents WBDoc As HTMLDocument
Private Function WBdoc_Onclick() As Boolean
    WBdoc_Onclick = True
    AllowPop = True'这个是判断是否是用户按下了鼠标点击连接的标志
End Function
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
Dim htm As IHTMLDocument2
On Error Resume Next
Set htm = WebBrowser1.Document
Set WBDoc = htm
End Sub

Private Sub WebBrowser1_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, flags As Variant, targetFrameName As Variant, postData As Variant, headers As Variant, Cancel As Boolean)
Set WBDoc = Nothing
End Sub
发表于:2005-8-29 20:57:00
2

这个办法几乎可以不显示任何自动弹出的窗口。我几乎很高兴了,没想到无法打开某些网页。也就是说对于某些网页,上面的WBdoc_Onclick根本就没有被触发。就比如CSDN的帖子,还有有些网站的短消息(比如VB情报局)。而比如新浪上的新闻等又是好的,请问怎么解决?总体来说就是你是如何拦截自动弹出窗口的?谢谢!

2、有些窗口(网页),就比如上面说的短消息窗口。如果用IE打开的时候是小窗口,没有菜单栏、工具栏等等的窗口。而你的浏览器似乎将其“放大”了以适应浏览器的大小。为此我惊叹不已!请问如何实现?

3、XP下,其他系统不记得了,有个功能,叫做自动完成。比如输入论坛用户名的文本框,鼠标单击就会列出曾经输入过的用户名。自己开发的就没有这个功能。请问你是怎么实现的?

说了这么多,也许你看的累了,希望指教!
QQ:173810850
hpygzhx520@163.com

不胜感激!
期待回音!


nullvb

积分:1002

注册:2005-6-28

发表于:2005-8-29 21:09:00
3

非常抱歉,主要是懒,那些文档什么的都没写,只有简单的注释,
也太难写了,呵呵

1.我的自动拦截窗口的原理,其实在选项窗口"过滤"的那页已经说明了,
"当新开页面在鼠标左键单击或按下Enter后的一定时间内发生时,那么判断这个不是自动弹出的页面"

我判断鼠标是否按下是用了鼠标钩子在mGlobalInputHook中,

2.这个好像也没特别处理,我想应该是在cWebBrowser的IDocHostUIHandler_ResizeBorder的原因吧,

3.能使用自动完成,原因是Implements IDocHostUIHandler,在其GetHostInfo里面控制,也就是在cWebBrowser中的IDocHostUIHandler_GetHostInfo
 
发表于:2005-8-29 22:37:00
4

呵呵,体谅。一个人写程序哪有那么多时间写文档啊。
"当新开页面在鼠标左键单击或按下Enter后的一定时间内发生时,那么判断这个不是自动弹出的页面"
意思是假设在鼠标按下了之后,(假设是“刚好”在鼠标按下了之后吧),产生的页面视为不是自动弹出的?那我明天好好看看mGlobalInputHook
我以为你是判断URL呢
第二个问题先放一下吧
谢谢你的回复。
明天看看你的代码后再请教。
还有给你个建议:在你的readme里面应该写将所有tlb文件等放到系统目录去!
因为的今天觉得那些引用经常丢失,重新引用后无法保存成果。放到system32里面后打开工程快多了。


nullvb

积分:1002

注册:2005-6-28

发表于:2005-8-29 23:16:00
5

从按下鼠标左键到触发newwindow2,会有个时间间隔,这个间隔在比较小的时候就判断是由用户点击的,虽然有时会有问题,但基本上都是可以的了
判断url的也有,"选项"那里也提供了这个选项
tlb的位置随个人喜欢吧
 
发表于:2005-8-30 0:18:00
6

多谢解答,明天我仔细看看再请教你。
发表于:2005-8-30 10:01:00
7

哎,惭愧啊,看了半天,绕来绕去……太高深了
如果你有时间,并且愿意的话,能否把上面的1、3两个功能提出来?呵呵,我知道这有点过分了。
如果不愿意那就算了。
谢谢。


nullvb

积分:1002

注册:2005-6-28

发表于:2005-8-30 12:10:00
8

msdn有篇文章教如何用webbrowser的,名曰"WebBrowser Customization"
http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/hosting/wbcustomization.asp

关于问题3,你可以在这里找到解释,csdn文档那里好像有这篇的汉化版
 
发表于:2005-8-30 13:02:00
9

谢谢解答。那个代码示例是什么语言?看来得会多门语言才行啊。
发表于:2005-8-30 16:15:00
10

你好,问个初级一点的问题。引用浏览器控件后如何把它“画”出来?显示在窗体上?
发表于:2005-8-30 18:11:00
11

引用的不行
发表于:2005-8-30 20:08:00
12

这个代码里面就是引用的!!
发表于:2005-8-30 22:15:00
13

这里用其实只是用了类型库而已,作用tlb文件相似,
创建的工作都在cwebbrowser里面,这句
CoCreateInstance CLSID_WebBrowser, Nothing, CLSCTX_INPROC_SERVER, IID_IUnknown, oUnk
发表于:2005-9-2 12:26:00
14

你好,能否详细指点一下关于自动完成的功能?
谢谢
发表于:2005-9-4 11:42:00
15

我已经差不多全部照抄你的代码了,为什么还是无法实现自动完成?
请指教:
Implements olelib.IDocHostUIHandler
Public oic As olelib.ICustomDoc
Private Sub IDocHostUIHandler_GetHostInfo(pInfo As olelib.DOCHOSTUIINFO)
pInfo.dwFlags = DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE
pInfo.dwDoubleClick = DOCHOSTUIDBLCLK_DEFAULT
End Sub

Private Sub WebBrowser1_NavigateComplete2(ByVal pDisp As Object, url As Variant)
Set oic = WebBrowser1.Document
oic.SetUIHandler Me
End Sub
为什么?问题出在哪里?
发表于:2005-9-5 9:54:00
16

算了,不说这个了
那如何实现禁止脚本错误提示?
发表于:2005-9-6 23:02:00
17

呵呵,这些天在玩linux,一直没上来...

并不是说Implements olelib.IDocHostUIHandler就能实现自动完成功能,主要的实现代码在cWebbrowser.pvCreateWBControl中,具体意思,我不太懂,这是抄回来的,

来源于这里,http://www.mvps.org/emorcillo/en/index.shtml,地址是http://www.mvps.org/emorcillo/download/vb6/ctl_wb.msi

我是在这个的基础上修改来的,这个代码如果要编译的话,需要这样,
在project properties那里的component页中,version compatibility选no compatibility

关于脚本错误提示,首先,ie选项中必须是禁用了"脚本调试",然后
Implements olelib2.IOleCommandTarget,然后在IOleCommandTarget_Exec里面处理,
发表于:2005-9-7 21:03:00
18

多谢解答,自动完成差不多了,主要缺脚本错误……现在在出差,回去后好好研究。
发表于:2005-9-9 17:33:00
19

你好,脚本错误和自动完成差不多了,多谢你的帮助。
我判断鼠标是否按下是用了鼠标钩子在mGlobalInputHook中……
这个我没有看明白,请指点一下……
还有个奇怪的问题,我设置了自动完成之后,浏览器控件就没有任何快捷键了,包括CTRL+V等等,为什么啊……
多谢!
发表于:2005-9-11 12:56:00
20

有个奇怪的问题,我设置了自动完成之后,浏览器控件就没有任何快捷键了,包括CTRL+V等等,为什么啊……
多谢!
发表于:2005-9-11 13:33:00
21

为了实现自动完成,我在Form_Load里面这样写:
    Dim oWbr As shdocvw.WebBrowser
    Dim oOLEObj As olelib.IOleObject
    Set oWbr = WebBrowser1
    Set oOLEObj = oWbr
    oOLEObj.SetClientSite Me
    Set oOLEObj = Nothing
    Set oWbr = Nothing
Private Sub IDocHostUIHandler_GetHostInfo(pInfo As olelib.DOCHOSTUIINFO)
    pInfo.dwFlags = DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE
    pInfo.dwDoubleClick = DOCHOSTUIDBLCLK_DEFAULT
End Sub
有什么错误吗?自动完成实现了,但是浏览器控件的快捷键都没有了,包括TAB、CTRL+V等等都没有了,请问为什么?如何解决?多谢!
发表于:2005-9-11 13:49:00
22

还有个问题:
关于脚本错误提示,首先,ie选项中必须是禁用了"脚本调试",然后
Implements olelib2.IOleCommandTarget,然后在IOleCommandTarget_Exec里面处理,
但应该和浏览器控件有个“连接”(初始化?)吧?在你的代码里面我没有找到。
还是不需要连接?
谢谢,期望你的回复!
发表于:2005-9-11 21:15:00
23

关于键盘,
需要在IDocHostUIHandler_TranslateAccelerator里面处理,具体看里面的代码,
不过现在有个问题,只要implemet了IDocHostUIHandler后,整个程序的键盘事件都会被
webbrowser吃掉,目前我还没有想到好的解决办法,


Implements olelib2.IOleCommandTarget就已经是建立了连接了
发表于:2005-9-11 21:25:00
24

IDocHostUIHandler_TranslateAccelerator我之前已经写上了,但是根本没有用,能编译通过的代码应该不会缺少什么吧?居然连删除键等都无效。另外你帮忙看看我的Form_Load的代码是否有问题?我怀疑是“连接”浏览器控件的方法不对才会这样的。
谢谢,多谢!
发表于:2005-9-11 21:51:00
25

测试发现,IDocHostUIHandler_GetDropTarget、IDocHostUIHandler_GetHostInfo执行了,而其他的如IDocHostUIHandler_TranslateAccelerator没有执行!不知道为什么……
发表于:2005-9-11 22:23:00
26

1.如果用添加部件(ShDocVwCtl)的方式来添加webbrower的话是会有些问题的
2.如果用我的那个cwerbrowse来创建,一定要直接放到一个窗体上,不然也会有问题,
发表于:2005-9-12 8:57:00
27

用你的方法必须使用类模块吗?若使用你的代码,在窗体中,oOleObj.SetClientSite Me无法通过。用添加部件(ShDocVwCtl)的方式来添加webbrower的话,难道就没有解决的办法了吗?难过……
发表于:2005-9-12 12:05:00
28

是的,我没有想到解决办法,还是用类比较好,代码全部放到from中,很乱的
其实这样添加挺好,窗体上忒干净,哈哈
发表于:2005-9-12 12:35:00
29

多谢解答,但实在不知道为什么会IDocHostUIHandler_GetHostInfo执行了而其他的如IDocHostUIHandler_TranslateAccelerator没有执行。我的代码中使用了TIMER控件监视浏览器控件的单击,所以用类的话改动太大了。
你是这方面的专家,麻烦想想如何解决这个问题。我现在只想顺利的解决脚本错误和自动完成,但是浏览器控件没有快捷键了……
发表于:2005-9-17 11:14:00
30

MDI下,一文本框用来输入URL,子窗体上仅仅有浏览器控件,访问一个网页后,再在文本框里面输入地址,假设输入错误,需要用退格键来删除,结果……这个消息给浏览器控件捕捉掉了……

不仅仅是退格键,包括网页中的其他快捷键……郁闷啊,什么道理?如何处理?

多谢!

发表于:2005-9-17 12:40:00
31

看23帖,

有个不太好的解决办法,当那个文本框获得焦点时调用cWebbrowser.Release
发表于:2005-9-17 19:25:00
32

我的解决办法是那个文本框获得焦点时建一个和文本框一样大小的窗体覆盖文本框,窗体上有文本框。输入后传递给MDI的文本框。但是有个毛病,MDI改变大小、位置后,显示出来的窗体位置就不正确了……呵呵
发表于:2005-9-19 16:49:00
33

WebBrowser访问一个地址后好象没有将网址写入历史记录中?如何让其写入呢?
发表于:2005-9-19 18:09:00
34

没遇到过,具体是怎样的呢?
发表于:2005-9-19 20:11:00
35

好象是写入了,因为用一个查看历史记录的软件查看,的确在记录里面。
还有个问题,如何调用 “查看源文件”这个功能?
发表于:2005-9-19 21:17:00
36

有个简单的,不过忘记了,
另外一个是向Internet Explorer_Server发送wm_command消息,wparam参数为2139&

具体可看这篇文章,http://www.codeproject.com/shell/InvokeIEHiddenCommand.asp
发表于:2005-9-19 21:28:00
37

哇,又是VC的代码啊,看不太懂啊。感谢你这段时间对我的帮助!
发表于:2005-9-20 9:43:00
38

对了,你做那个MDITAB多页面选项卡是用什么代码?就是选择不同的页面,在页面之间切换的那个?谢谢
发表于:2005-9-20 11:41:00
39

vc的东西看得多就懂了

那个选项卡是我自己写的,由cButton,cButtonBar组成
作用是,在picturebox上画个按钮
发表于:2005-9-20 16:06:00
40

按钮?可没有双击事件啊,难道捕捉两次单击的间隔?哈哈



评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值