admin管理员组文章数量:1405601
I am working with VB6 WebBrowser, Here i need to open a vb6 form when user click any particular link of WebBrowser
's link like
In HTML
<html>
<head>
<body>
<a href="--show vb6 form--">Click To show VB6 Form2</a>
</body>
</html>
I do't have any idea how to do it. I thought sometime it can be done a third text file like when the link clicked will write a cod like 002
in a text file.
And the in vb form a Timer will check once a second the file, when timer detect the file contains 002
it will show the form.
Can be do this by this method? or anything else shorter i can except?
I am working with VB6 WebBrowser, Here i need to open a vb6 form when user click any particular link of WebBrowser
's link like
In HTML
<html>
<head>
<body>
<a href="--show vb6 form--">Click To show VB6 Form2</a>
</body>
</html>
I do't have any idea how to do it. I thought sometime it can be done a third text file like when the link clicked will write a cod like 002
in a text file.
And the in vb form a Timer will check once a second the file, when timer detect the file contains 002
it will show the form.
Can be do this by this method? or anything else shorter i can except?
Share Improve this question asked Aug 3, 2017 at 5:32 SwisterSwister 637 bronze badges 3-
did you wrote the HTML page? Can you modify the markup to add some information to the
a
Tag ? – deblocker Commented Aug 3, 2017 at 9:29 - yes i wright it. I can change it – Swister Commented Aug 3, 2017 at 9:52
-
added example with a custom
data-attribute
, check it out – deblocker Commented Aug 3, 2017 at 11:24
3 Answers
Reset to default 4Pick a better naming scheme like:
<a href="#vb-showform2">Click To show VB6 Form2</a>
<a href="#vb-waffles">Waffles</a>
Then intercept link clicks via the BeforeNavigate2
event, look at the url and if it matches #vb-*
run your code:
Private Sub WebBrowserCtrl_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)
'// get #vb-XXX mand from url
Dim pos As Long: pos = InStrRev(URL, "#vb-")
If pos Then
Cancel = True '// stop default navigation
URL = Mid$(URL, pos + 4)
Select Case LCase$(URL)
Case "showform2": Form2.Show
'...
Case "waffles": MsgBox "Waffles."
Case Else: MsgBox "Unknown Command " & URL
End Select
End If
End Sub
Instead of putting the form name inside the href
attribute, I believe a better method would be to set a your own data attribute
and use that, it seems to me a much cleaner way to do such a task.
In my example, inside the href
tag i'm using the classic void(0)
to prevent the link navigation, otherwise your external link to VB forms could break the browser history with unexpected results.
To use the WebBrowser
control, You should have already added in your VB project a reference to the Microsoft Internet Controls
, what you need next is to add a reference to the Microsoft HTML Library
, the type library contained inside the mshtml.tlb
file.
Assuming your WebBrowser
control is called "WebBrowser1", and you have three additional forms called "Form1", "Form2" and "Form3", in the form where you placed the WebBrowser
control put this piece of code:
Private HTMLdoc As MSHTML.HTMLDocument
' Create a Web Page to test the navigation '
' You can skip this phase after your test are successfully executed '
Private Sub Form_Load()
Dim HTML As String
WebBrowser1.Navigate "about:blank"
HTML = "<html>"
HTML = HTML & "<title>Open a VB Form from a Link</title>"
HTML = HTML & "<body>"
HTML = HTML & "<a data-vb='Form1' href='javascript:void(0)'>Click To show Form1</a>"
HTML = HTML & "</br>"
HTML = HTML & "<a data-vb='Form2' href='javascript:void(0)'>Click To show Form2</a>"
HTML = HTML & "</br>"
HTML = HTML & "<a data-vb='Form3' href='javascript:void(0)'>Click To show Form3</a>"
HTML = HTML & "</br>"
HTML = HTML & "</body>"
HTML = HTML & "</html>"
WebBrowser1.Document.Write HTML
End Sub
' This will load and show the form specified in the data-vb attribute of the link '
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)
Dim frm As Form, FormName as String
If Not (WebBrowser1.Document Is Nothing) Then
Set HTMLdoc = WebBrowser1.Document
FormName = vbNullString & HTMLdoc.activeElement.getAttribute("data-vb")
If Not FormName = vbNullString Then
Set frm = Forms.Add(FormName)
frm.Show
End If
End If
End Sub
An additional note:
You can get the content of the clicked link in following way:
HTMLdoc.activeElement.toString
Obviously, for all links in my test page, the result will be:
javascript:void(0)
which is the same as the URL parameter of the BeforeNavigate event.
Another useful information which you can get from the HTMLDocument
and wouldn't be available in the BeforeNavigate
event is, for example:
HTMLdoc.activeElement.outerHTML
the result will be:
<A href="javascript:void(0)" data-vb="Form2">Click To show Form2</A>
To do this with a button instead of a link, add the button to the document and a bit of javascript:
<input type="button" id="MyButton1_id" style="cursor: pointer" name=MyButton1 value="Show It!">
<SCRIPT LANGUAGE="VBScript">
Sub MyButton1_OnClick()
location.href = "event:button1_show"
End Sub
</SCRIPT>
Then in the BeforeNavigate2
event:
Public Sub webBrowser_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)
Select Case LCase$(URL)
Case "event:button1_show"
Cancel = True
Form2.Show
Case "event:other_stuff"
'other stuff to do, etc
End Select
End Sub
本文标签: javascriptShow VB6 forms when click a link in html page of webbrowserStack Overflow
版权声明:本文标题:javascript - Show VB6 forms when click a link in html page of webbrowser - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744340538a2601448.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论