設(shè)為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

tag 標(biāo)簽: 文章

相關(guān)日志

分享 Access邁向Web化第二步:html與winform交互
熱度 2 ganlinlao 2015-12-9 10:37
這篇文章可能會寫很久,很久。 在vba中不要試圖全面控制Webbrowser ,因為那是用vba辦不到,即使能辦到也一定是辦不好的事情。 而且全面控制webbrowser的復(fù)雜度會大大超出你的意料。 可以說在所有使用webbrowser的編程語言中,vba調(diào)用是最簡便的一種。 html與winform的交互,主要是兩種類型的交互。一種是html(js)與vba函數(shù)的互相調(diào)用,一種是html(js)與recordset的數(shù)據(jù)交互 一、html(js)如何與vba函數(shù)互相調(diào)用? vba通過html的dom,可以全面讀寫html和js,這是很容易做到的。但html或js如何調(diào)用vba函數(shù)呢? 主要有兩種方式: 1、通過事件,來通知winform執(zhí)行vba函數(shù)。 引用microsoft html object libray類型庫 Dim WithEvents m_Doc As MSHTML.HTMLDocument Private Sub Form_Load() Me.WebBrowser1.Navigate2 "http://www.baidu.com" 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 m_Doc = Me.WebBrowser1.Document End Sub Private Function m_Doc_onclick() As Boolean Dim elem As IHTMLElement Set elem = m_Doc.parentWindow.event.srcElement select case elem.id '這其實(shí)是一個事件列表 case id1 call mySub1 case id2 call mysub2 …… end select End 這里重點(diǎn)用到的是Dom的window.event對象,并且主要是用到srcElement屬性。 使用 window.event 對象,可以捕獲 WebBrowser 眾多的鼠標(biāo)和鍵盤事件,如鼠標(biāo)坐標(biāo)、按 下了鍵盤哪個鍵,以及鍵盤 Ctrl、Alt、Shift 鍵的狀態(tài)、當(dāng)前網(wǎng)頁元素的ID、索引等等。 可以說這是VBA與webbrowser交互的唯一簡便途徑了。 這種方式的缺點(diǎn): (1)、必須為每一個htm頁面寫特定的事件列表,雖然這當(dāng)中最主要是onclick事件。 它的抽象度非常差。如果你有什么更好的方式,不妨提出來討論一下。 (2)、WebBrowse 控件的 event 對象只能捕捉主頁面的有關(guān)事件,對網(wǎng)頁包含的內(nèi)嵌網(wǎng)頁和框架無能為力。要捕捉內(nèi)嵌網(wǎng)頁和框架的有關(guān)事件,必須為每個網(wǎng)頁定義一個捕捉事件,但 VBA 的 WithEvents 語句并不支持定義數(shù)組事件。 這里很容易轉(zhuǎn)換成另一個問題: 如何讓withEvents支持collection或數(shù)組? 這個問題的答案,能解決的事情范圍變得很大了,如access的mdi問題等。 2、通過window.external來調(diào)用vba函數(shù) 通過window.external調(diào)用vba函數(shù),其實(shí)是比較理想的方式,所有的ie的activeX插件,幾乎都是通過這種方式。但 Webbrowser只有在實(shí)現(xiàn) IDocHostUIHandler接口后, window.external才能調(diào)用VBA函數(shù)。 這在vb6中可以做到,但在access中辦不到,因為它必須引用olelib.tlb,而access本身沒有任何編譯功能。( 寫到這里,我忍不住想起mde,accde,這種編譯其實(shí)是徹頭徹尾的騙人小把戲) 很可惜,這種方式只能放棄了。 表面看起來,似乎缺陷蠻多的,功能有限,但別忘了我們在Access中使用html,并不是想用html來全面替代winform的功能,因為這不科學(xué),也完全沒必要。所以還是可以承受的。不要以為用c++,c#、vb.net調(diào)用webbrowser會更容易,坦白地說,它們只會帶來更多的麻煩和痛不欲生的折磨而已。也不要以為用webkit會更容易,那是永遠(yuǎn)不可能的。 二、數(shù)據(jù)交互: 準(zhǔn)備好幾種工具: 1、 json的vba版解析器 。 在html5時代,不管你見或不見,json就在那里,不遠(yuǎn)、不近, 你回避不了。 所以了解json格式是必須的,很容易在網(wǎng)絡(luò)上搜到幾十種vb6版或asp版的json解析器。它們都很方便。挑一種符合你使用的,或有人最近兩三年還在維護(hù)的json解析器。
個人分類: access入門|3302 次閱讀|4 個評論

QQ|站長郵箱|小黑屋|手機(jī)版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2024-10-23 06:17 , Processed in 0.054061 second(s), 15 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回頂部