Office中國(guó)論壇/Access中國(guó)論壇

 找回密碼
 注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

tag 標(biāo)簽: 辦不到

相關(guān)帖子

版塊 作者 回復(fù)/查看 最后發(fā)表

沒(méi)有相關(guān)內(nèi)容

相關(guān)日志

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

QQ|站長(zhǎng)郵箱|小黑屋|手機(jī)版|Office中國(guó)/Access中國(guó) ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2025-7-13 07:47 , Processed in 0.056253 second(s), 13 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回頂部