2012-09-20 95 views
1

我需要在VB屏幕中顯示數據。我正在使用WebBrowser控件。在Visual Basic中使用Web瀏覽器控件顯示HTML內容

然後我使用下面的命令:

m_oFrm.WebBrowser1.Document.Write (SHtml) 

在屏幕上顯示的輸出。

聲明在調試模式會很好,但在EXE/DLL它給錯誤

對象或變量未設置

我用另一種選擇爲:

Dim objHTMLDocScore As MSHTML.HTMLDocument 
Set objHTMLDocScore = m_oFrm.WebBrowser1.Document 

然後

Document.Write (SHtml) 

但我得到的錯誤,而編譯爲

函數或接口標記爲受限制,或函數使用不支持的自動化類型Visual Basic中

我可以看到有一個問題在StackOverflow中的錯誤消息「功能或接口標記爲受限,或者該函數使用Visual Basic中不支持的自動化類型」,但我無法理解。

我使用的Internet Explorer版本8

+3

一個小問題是你使用不屬於那裏的「愚蠢的括號」。雖然在這種情況下,除了讓事情運行速度慢一點(他們基本上說「評估這個並以價值傳遞結果」),它們不會傷害任何東西,在某些情況下可能導致各種悲傷。甚至IDE都會警告你(通過在左括號之前插入該空格)。 – Bob77

回答

3

您正在試圖寫入到尚未建立​​的文件。當你調試時,瀏覽器有時間來構建對象,否則它不會。

Check the readyState property寫之前。

如果你想在任何地方導航之前寫信,那麼首先導航到about:blank,等待readyState,然後寫。

0

通常DHTML編輯控件適用於這樣的事情做得更好:

Private Sub Form_Load() 
    With DHTMLEdit1 
     .BrowseMode = True 
     .DocumentHTML = "<html><body>Hello World!</body></html>" 
    End With 
End Sub 

你當然會希望新(後XP)TriEdit微軟包裝,最有可能相關的SDK文檔。

-1

您可以使用以下格式。 假設您正在使用被命名爲Webbrowser1您VB6形式的瀏覽器,然後嘗試像這樣...

Webbrowser1.Navigate2(「 - 您的HTML這裏 - 」)

這將肯定工作。

+2

沒有工作,當然。 – SteveCav

0

假設你webbrower是[WB]

private sub subOpenHtml(byval sHtml as string) 

    WB.Navigate "about:blank" 'creates a document to do something on 
    subBrowserStopClickSound 'stops ie click sound '(not necessary but a nice touch so users of your program don't know you are hijacking IE. 

setdocretry: 

    If WB.ReadyState = READYSTATE_COMPLETE Then 
     If Not (WB.Document Is Nothing) Then 
       WB.Document.open 
       WB.Document.write sHtml 
       WB.Document.Close 
     Else 
       Stop'error handling 
     End If 
    Else 
     Pause.subFor 1 
     GoTo setdocretry: 
    End If 

end sub 

代碼subBrowserStopClickSound(單獨的模塊好主意):

在模塊的頂部:

Private Declare Function CoInternetSetFeatureEnabled Lib "urlmon.dll" (ByVal FeatureEntry As Integer, ByVal dwFlags As Long, ByVal fEnable As Long) As Long 
Private Const FEATURE_DISABLE_NAVIGATION_SOUNDS = 21 
Private Const SET_FEATURE_ON_PROCESS As Integer = &H2 

下面說:

private sub subBrowserStopClickSound 
    Call CoInternetSetFeatureEnabled(FEATURE_DISABLE_NAVIGATION_SOUNDS, SET_FEATURE_ON_PROCESS, True) 
end sub 

用於暫停的代碼:

再次地,在一個獨立的模塊(我發現這個代碼是在很多情況下是非常有用的,並且是的DoEvents更好和更可控的替代)

頂模塊的:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 

Private Type variables 
       loldSecond As Long 
End Type 
Dim v As variables 

下面說:

Sub subFor(ByVal Delay As Single) 

    Dim seconds As Long 
    v.loldSecond = 0 

    Delay = (Timer + Delay) 

    Do 
     DoEvents: DoEvents: DoEvents: DoEvents 

     'tells us how many seconds left without decimal 
     seconds = (Delay - Timer) 

     Sleep 10 
    Loop While Delay > Timer 

End Sub 

很抱歉,如果我忽略的代碼的東西,如果是的話,請讓我知道這樣我就可以糾正。

相關問題