畢業(yè)設(shè)計(論文)-WORD文檔分類管理模塊的編寫.doc
《畢業(yè)設(shè)計(論文)-WORD文檔分類管理模塊的編寫.doc》由會員分享,可在線閱讀,更多相關(guān)《畢業(yè)設(shè)計(論文)-WORD文檔分類管理模塊的編寫.doc(31頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、WORD 文檔分類管理模塊的編寫文檔分類管理模塊的編寫 摘摘 要要 隨著計算機普及和計算機科學(xué)技術(shù)的發(fā)展,并且由于電子文檔具備方便性、 快捷性和易操作性,人們將大部分信息以電子文檔形式儲存和歸檔。面對與日 驟增的海量數(shù)據(jù)信息,對它們進行有效的整理和管理變得尤其重要。人們越來 越期望能在統(tǒng)一的文檔操作界面上,對各類文檔信息進行收集收藏、整理歸檔, 方便查詢。 本文詳細介紹了 Word 文檔分類管理軟件的設(shè)計和實現(xiàn)。軟件對用戶需求做 了充分的考慮,進行正確和較完整的設(shè)計,使得能在統(tǒng)一的文檔界面上,方便地 對磁盤上所有文檔(可包括其它存儲介質(zhì),如:移動硬盤等,文檔指 Microsoft Office
2、 里的 Word 文檔,后綴名為.doc)進行分類管理。文檔管理功能包括:新建 記錄、打開文檔、編輯記錄、刪除記錄或文檔、添加文檔等。 本軟件以 Word 插件形式實現(xiàn),在 Word 工具檔里增加自定義工具,并實現(xiàn) 上述各種功能。系統(tǒng)根據(jù) com 組件編程原理,用 Visual Basic 6.0 實現(xiàn)了一個 Word 插件,并用 Office 2003 Access 保存文檔分類信息。 關(guān)鍵詞關(guān)鍵詞:COM 組件;Word 插件;文檔分類器 The Design and Implementation of a Word Addin for Document Classification Ma
3、nagement Abstract With the popularity of computer science and the development of computer technology, along with the advantages of electronic documents such as convenience, efficiency and ease to use, most of information is stored and archived in the form of electronic document. Faced with the fact
4、that amount of information increasing ceaselessly, it is more and more urgent to find a way to manage and access information effectively and easily. It is expected that we can collect, archive and refer to any types of documents facilely in a unified document interface. This article introduces the d
5、esign and implementation of a Word document classification management software. This system took the users entire requirement into consideration, and was designed correctly and completely, with which any types of document on the disk (including not only the Word documents but also other types on oth
6、er media) can be classified and managed in a unified document interface. Its document management functions includes: creating, editing and deleting document records and adding or removing files into or from the records. The software is implemented in the form of a Word addin component, which adds a
7、user-defined toolbar into the Word, and implemented the functions mentioned above from with the toolbar. Obeying the principles of COM component programming, it is implemented with Visual Basic 6.0 and saves the document classification information in a database of Office2003 Access. Key words: COM C
8、omponent; Word Addin; Document Classifier 目目 錄錄 論文總頁數(shù):31 頁 1引言1 1.1課題背景1 1.2本課題研究的意義.1 1.3本課題的研究方法.1 2組件、COM、接口、插件.1 2.1組件1 2.1.1使用組件的優(yōu)點.2 2.1.2對組件的需求.2 2.2COM.4 2.3接口6 2.3.1IUnknown 接口7 2.3.2Dispatch.8 2.4插件8 3WORD 對象模型9 3.1WORD 中的對象模型(OBJECT MODEL)9 3.2WORD 對象模型抽象圖.9 4系統(tǒng)分析和設(shè)計.10 4.1功能需求分析.10 4.2數(shù)據(jù)
9、存儲結(jié)構(gòu)分析.11 4.3數(shù)據(jù)庫設(shè)計.11 5系統(tǒng)實現(xiàn)13 5.1插件接口方法.13 5.2事件響應(yīng)14 5.3系統(tǒng)實現(xiàn)15 5.3.1添加 Word 插件.16 5.3.2添加 Word 工具欄.17 5.3.3連接數(shù)據(jù)庫.18 5.4功能模塊設(shè)計和實現(xiàn).19 5.4.1新建功能.21 5.4.2打開文檔功能.23 5.4.3編輯記錄功能.23 5.4.4添加文檔功能.24 5.4.5刪除文檔和記錄功能25 結(jié) 論28 參考文獻28 第 3 頁 共 31 頁 1 1 引言引言 1.11.1課題背景課題背景 隨著計算機普及和計算機科學(xué)技術(shù)的發(fā)展,電子文檔具備有方便性、快捷性、 易操作性,人們將
10、大部分信息以電子文檔形式儲存和歸檔。面對與日俱增的海 量數(shù)據(jù)信息,對它們進行有效整理和管理變得尤其重要。人們越來越期望能在 統(tǒng)一的文檔操作界面上,對各類文檔信息進行收集收藏、整理歸檔,方便查詢。 1.21.2本課題研究的意義本課題研究的意義 Word 文檔是實際工作學(xué)習(xí)中最為常用的文檔格式之一,為了增強 Word、Excel 等軟件的自動化能力,人們開發(fā)了各種提高辦公效率的軟件,它 們大多數(shù)實用、專業(yè)性強。為了避免用戶做大量重復(fù)性的工作,提高 Office 辦 公效率,達到提高其實用功能的目的,可根據(jù)具體工作內(nèi)容要求,編寫出最具 本地化、個性化、最合適的軟件。 1.31.3本課題的研究方法本課
11、題的研究方法 通過對人們?nèi)粘?Office 辦公情況及存在問題進行透徹分析,并根據(jù)辦公習(xí) 慣,總結(jié)出較可行的解決方案。 2 2 組件、組件、COMCOM、接口、插件、接口、插件 2.12.1組件組件 一個應(yīng)用程序通常是由單個的二進制文件組成。當(dāng)編譯器生成此應(yīng)用程序 之后,在對下一版本重新編譯并且發(fā)行新生成的版本之前,應(yīng)用程序一般不會 發(fā)生任何變化。操作系統(tǒng)、硬件及客戶需求的改變都必須等到整個應(yīng)用程序被 重新編譯之后才能夠得以認可,整個軟件工程就這樣隨著已發(fā)行軟件而日益老 化。 目前這種狀況已經(jīng)發(fā)生了變化。人們認識到應(yīng)用程序在發(fā)行之后不應(yīng)保持 那種靜止的狀態(tài)。開發(fā)人員應(yīng)找出一種方法,以能夠給已經(jīng)
12、發(fā)行的軟件不斷地 注入新的活力。這種解決方案就是將整個的應(yīng)用程序分隔成多個獨立的部分, 也即組件。此作法的好處是可以隨著技術(shù)的不斷發(fā)展而用新的組件取代已有的 組件。此時的應(yīng)用程序?qū)⒉辉傧褚郧澳菢邮且粋€在發(fā)行之前就已命中注定要過 時的靜態(tài)實體,而是可以隨著新組件不斷取代舊的組件而趨于完善,并且從已 有的組件可以建立全新的應(yīng)用程序。 傳統(tǒng)的作法是將應(yīng)用程序分割成文件、模塊或類,然后將它們編譯并鏈接 成一個鐵板一塊狀的應(yīng)用程序。它與組件建立應(yīng)用程序的過程(稱為是組件架 構(gòu))有很大的不同。一個組件同一個微型應(yīng)用程序類似,即都是已經(jīng)編譯、鏈 接好并可以使用了,應(yīng)用程序就是由多個這樣的組件打包而得到的。各
13、定制的 第 4 頁 共 31 頁 組件可以在運行時同其他組件連接起來以構(gòu)成某個應(yīng)用程序。在需要對應(yīng)用程 序進行改進時,只需將構(gòu)成此應(yīng)用程序的組件中的某個用新的版本替換掉即可。 當(dāng)然將鐵板應(yīng)用程序拆分成組件需要一個強大的工具。我們所用的工具就 是 COM。COM,即組件對象模型,是關(guān)于如何建立組件以及如何通過組件建 構(gòu)應(yīng)用程序的一個規(guī)范。目前 Microsoft 的幾乎所有應(yīng)用程序都使用了 COM。 2.1.12.1.1 使用組件的優(yōu)點使用組件的優(yōu)點 前面已經(jīng)提到過組件架構(gòu)的一個優(yōu)點:應(yīng)用程序可隨時間的流逝而發(fā)展進 化。除此之外,使用組件還有一些可以使對已有應(yīng)用程序的升級更加方便和靈 活的優(yōu)點,
14、如應(yīng)用程序的定制,組件庫以及分布式組件等。 1.組件架構(gòu)從本質(zhì)上講就是可被定制的,因此用戶可以用更能滿足他們需 要的組件來將某個組件替換掉。 2.組件架構(gòu)最引人注目的優(yōu)點之一是快速應(yīng)用程序開發(fā)。這一優(yōu)點可以使 開發(fā)人員從某個組件庫中取出所需的組件,并將其快速地組裝到一塊以構(gòu)造所 需的應(yīng)用程序,如同搭積木塊一樣。這種從標準的部件構(gòu)造應(yīng)用程序的做法, 很長時間以來一直是軟件工程師們的一個未曾實現(xiàn)的夢想。但是現(xiàn)在這一夢想 隨著 ActiveX 控件(以前被稱作是 OLE 控件)的開發(fā)而正在被變?yōu)楝F(xiàn)實。 Visual Basic、C、C+以及 Java 程序員都可以利用 ActiveX 控件加速應(yīng)用程
15、序 及 Web 頁面的開發(fā)。 3.隨著網(wǎng)絡(luò)帶寬及其重要性的提高,對由分布在網(wǎng)絡(luò)上的多個部分組成應(yīng) 用程序的需求毫無疑問將保持強勁的增長勢頭。組件架構(gòu)可以使得開發(fā)這類分 布過程得以簡化。實際上客戶機服務(wù)器式的應(yīng)用就是向組件架構(gòu)跨出的第一 步。在那里整個應(yīng)用程序被分成兩部分:客戶機部分及服務(wù)器部分。 2.1.22.1.2 對組件的需求對組件的需求 使用組件的種種優(yōu)點直接來源于可以動態(tài)地將它們插入或卸出應(yīng)用程序。 當(dāng)然為了實現(xiàn)這種功能,所有的組件必須滿足兩個條件。第一,組件必須動態(tài) 連接。第二,它們必須隱藏(或封裝)其內(nèi)部實現(xiàn)細節(jié)。兩個需求是相互依賴 的。動態(tài)鏈接對于組件而言是一個至關(guān)重要的需求,而
16、信息隱藏則是動態(tài)鏈接 的一個必要條件。 1.動態(tài)鏈接:我們的最終目標是使用戶在應(yīng)用程序的運行過程中能夠?qū)⒔M 件替換掉。雖然并不是在所有的應(yīng)用程序中都需要給用戶提供這種控件,但我 們卻希望能夠?qū)⒔M件動態(tài)地鏈接到一起。 可以設(shè)想一下對于一個由組件構(gòu)成的,但不能在運行時進行鏈接的應(yīng)用程 第 5 頁 共 31 頁 序,當(dāng)用戶需要改變其中的某個組件時會發(fā)生什么。此時開發(fā)人員不得不將整 個程序重新鏈接或編譯一遍,然后重新發(fā)行新的版本。但是這種重新編譯或鏈 接對于最終用戶幾乎是不可能的事情。即使他們知道如何鏈接,但他們可能沒 有鏈接程序,或者沒有合適的鏈接程序。這種需要每次改變一個組件時就將其 鏈接一遍的程
17、序和傳統(tǒng)的鐵板一塊的程序?qū)嶋H上沒有什么差別。 2.信息封裝:為組成一個應(yīng)用程序,需要將各組件連接起來。當(dāng)需要將某 個組件用新的組件替換掉時,需要將此組件同系統(tǒng)斷開,然后將新的組件連上 去。顯然新的組件必須按同樣的方式連接到系統(tǒng)中,否則將需要重新編寫、重 新編譯或重新鏈接這些組件。不論組件或應(yīng)用程序是否支持動態(tài)鏈接,如果改 變了某個組件同其他組件的連接方式,那么整個系統(tǒng)的整體性實際已被破壞了, 此時至少需要將整個系統(tǒng)編譯一遍,甚至可能需要重新編碼。 對于一個應(yīng)用程序或組件,如果它使用了其它組件,那么我們稱之為一個 客戶,客戶通過接口同其他組件進行連接。如果某個組件發(fā)生了變化但其接口 沒有任何變化
18、,那么它的客戶將不需要進行任何修改。類似地,若客戶發(fā)生了 變化但沒有改變其接口,那么它連接的組件也不需要任何改變。但是如果客戶 或組件的修改導(dǎo)致了對接口的修改,那么接口的另一方也應(yīng)發(fā)生相應(yīng)的變化。 因此為充分發(fā)揮動態(tài)鏈接的功能,組件及客戶都應(yīng)盡可能不要改變它們的 接口。這意味著它們必須被封裝起來。也就是說,組件及客戶的內(nèi)部實現(xiàn)細節(jié) 不能反映到接口中,接口同內(nèi)容實現(xiàn)細節(jié)的隔離程序愈高,組件或客戶發(fā)生變 化時對接口的影響將越小。在接口沒有發(fā)生任何變化時,對組件的修改將幾乎 不會對應(yīng)用程序的其它部分產(chǎn)生什么影響。 這種將客戶同組件實現(xiàn)相應(yīng)隔離開來的要求對于組件加上了一些限制: 1.組件必須將其實現(xiàn)所
19、用的編程語言封裝起來。任一客戶都應(yīng)能使用任一 組件,不論他們是用什么編程語言實現(xiàn)的。將實現(xiàn)的編程語言暴露出來只會在 組件及客戶間引入新的依賴。 2.組件必須以二進制的形式發(fā)布。如果想將實現(xiàn)組件的編程語言隱藏起來, 那么在發(fā)布時它們必須是已被編譯、鏈接好并且馬上就可以投入使用的。 3.組件必須可以在不妨礙已有用戶的情況下被升級。一個組件的新版本必 須既能夠同老版本的客戶一起使用。也可以同新版本的客戶一起使用。 4.組件在網(wǎng)絡(luò)上的位置必須可以被透明地重新分配。組件及使用它的程序 應(yīng)能夠在同一進程中,不同的進程或不同的機器上運行??蛻魧h程組件的處 理方式應(yīng)與對本地組件的處理方式是一樣的。否則,當(dāng)將
20、某個本地組件移動到 網(wǎng)絡(luò)上的另外某個地方時,客戶程序必須被重新編譯。 將以上幾點加以說明: 第 6 頁 共 31 頁 1.與語言的無關(guān)性。為方便討論起見,假定某個應(yīng)用程序只能使用由 Objective C 編寫的組件進行定制。這樣一來,將不會有太多的人來為此應(yīng)用程 序編寫組件,因為大多數(shù)編程人員使用的是 C+。以后我們可能會用 C+來編 寫組件,從而使得應(yīng)用程序可用的組件多起來。但如果后來另外有一種語言, 假設(shè)是 Espresso Beans 變得流行起來,大家都放棄 C+,轉(zhuǎn)而使用這一語言。 為了使用應(yīng)用程序不被淘汰,我們需要用這種新語言來編寫組件。如此就有了 三種截然不同的編寫組件的方法。
21、在一個與語言無關(guān)的架構(gòu)中,任何人均可以 編寫組件,并且這些組件不會因為編程語言的發(fā)展而過時。 2.用戶可能會擁有使用同一個組件的兩個客戶應(yīng)用程序。假定其中的某個 應(yīng)用程序被指定使用某個組件的新版本而另一個應(yīng)用程序被指定來使用其老版 本。顯然人們希望老應(yīng)用程序仍能夠使用新安裝的新版本組件。但這種向后兼 容的能力不應(yīng)對組件的發(fā)展造成限制。強行改變某個組件的功能以使之適應(yīng)新 應(yīng)用程序的需要,同時使其能支持老的應(yīng)用程序仍應(yīng)是可能的。 2.22.2COM 軟件工程發(fā)展到今天,從一開始的結(jié)構(gòu)化編程,到面向?qū)ο缶幊蹋俚浆F(xiàn) 在的 COM 編程,目標只有一個,就是希望軟件能像積方塊一樣是累起來的, 是組裝起來
22、的,而不是一點點編出來的。結(jié)構(gòu)化編程是函數(shù)塊的形式,通過把 一個軟件劃分成許多模塊,每個模塊完成各自不同的功能,盡量做到高內(nèi)聚低 藕合。件工程的核心就是要模塊化,最理想的情況就是 100%內(nèi)聚 0%藕合。結(jié) 構(gòu)化編程方式只是一個開始。下一步就出現(xiàn)了面向?qū)ο缶幊?,它相對于面向?能的結(jié)構(gòu)化方式是一個巨大的進步。面向功能的模塊化方法它的著眼點是事物 之間的聯(lián)系,它眼中看不到事物的概念它只注重功能。面向功能的結(jié)構(gòu)化方法 因為它注意的只是事物之間的聯(lián)系,而聯(lián)系是多變的,事物本身可能不會發(fā)生 大的變化,而聯(lián)系則是很有可能發(fā)生改變的,聯(lián)系一變,那就是另一個世界了, 那就是另一種功能了。如果我們用面向?qū)ο蟮?/p>
23、方法,我們就可以以不變應(yīng)萬變, 只要事先把事物用類描述好,我們要改變的只是把這些類聯(lián)系起來的方法,只 是重新使用我們的類庫,而面向過程的方法因為它構(gòu)造的是一個不穩(wěn)定的世界, 所以一點小小的變化也可能導(dǎo)致整個系統(tǒng)都要改變。 然而面向?qū)ο蠓椒ㄈ匀挥袉栴},問題在于重用的方法。搭積木式的軟件構(gòu) 造方法的基礎(chǔ)是有許許多多各種各樣的可重用的部件、模塊。我們首先想到的 是類庫,因為我們用面向?qū)ο蟮姆椒óa(chǎn)生的直接結(jié)果就是許多的類。但類庫的 重用是基于源碼的方式,這是它的重大缺陷。首先它限制了編程語言。其次你 每次都必須重新編譯,只有編譯了才能與你自己的代碼結(jié)合在一起生成可執(zhí)行 文件。另一種重用方式很自然地就想
24、到了是 DLL 的方式。Windows 里到處是 第 7 頁 共 31 頁 DLL,它是 Windows 的基礎(chǔ),但 DLL 也有它自己的缺點。總結(jié)一下它至少有 四點不足。(1)函數(shù)重名問題。DLL 里是一個一個的函數(shù),我們通過函數(shù)名來調(diào) 用函數(shù),那如果兩個 DLL 里有重名的函數(shù)怎么辦?(2)各編譯器對 C函數(shù) 的名稱修飾不兼容問題。對于 C函數(shù),編譯器要根據(jù)函數(shù)的參數(shù)信息為它 生成修飾名,DLL 庫里存的就是這個修飾名,但是不同的編譯器產(chǎn)生修飾的方 法不一樣,所以你在 VC 里編寫的 DLL 在 BC 里就可以用不了。不過也可以用 extern “C“來強調(diào)使用標準的 C 函數(shù)特性,關(guān)閉修
25、飾功能,但這樣也喪失了 C的重載多態(tài)性功能。(3)路徑問題。放在自己的目錄下面,別人的程序就 找不到,放在系統(tǒng)目錄下,就可能有重名的問題。而真正的組件應(yīng)該可以放在 任何地方甚至可以不在本機,用戶根本不需考慮這個問題。(4)DLL 與 EXE 的 依賴問題。我們一般都是用隱式連接的方式,就是編程的時侯指明用什么 DLL,這種方式很簡單,它在編譯時就把 EXE 與 DLL 綁在一起了。如果 DLL 發(fā)行了一個新版本,我們很有必要重新鏈接一次,因為 DLL 里面函數(shù)的地址可 能已經(jīng)發(fā)生了改變。 DLL 的缺點就是 COM 的優(yōu)點。COM 和 DLL 一樣都是基于二進制的代碼 重用,所以它不存在類庫重
26、用時的問題。另一個關(guān)鍵點是,COM 本身也是 DLL,既使是 ActiveX 控件.ocx 它實際上也是 DLL,所以說 DLL 現(xiàn)在還是有重 用上有很大的優(yōu)勢,通 COM 本身的機制改變了重用的方法,以一種新的方法 來利用 DLL,來克服 DLL 本身所固有的缺陷,從而實現(xiàn)更高一級的重用方法。 COM 沒有重名問題因為根本不是通過函數(shù)名來調(diào)用函數(shù),而是通過虛函數(shù)表, 自然也不會有函數(shù)名修飾的問題。路徑問題也不復(fù)存在,因為是通過查注冊表 來找組件的,放在什么地方都可以,即使在別的機器上也可以。也不用考慮和 EXE 的依賴關(guān)系了,它們二者之間是松散地結(jié)合在一起,可以輕松地換上組件 的一個新版本。
27、 簡單地說,COM 是一種跨應(yīng)用和語言共享二進制代碼的方法。與 C+不同, 它提倡源代碼重用。源碼級重用雖然好,但只能用于 C+。它還帶來了名字沖 突的可能性,更不用說不斷拷貝重用代碼而導(dǎo)致工程膨脹和臃腫。Windows 使 用 DLLs 在二進制級共享代碼。這也是 Windows 程序運行的關(guān)鍵重用 kernel32.dll,user32.dll 等。但 DLLs 是針對 C 接口而寫的,它們只能被 C 或理解 C 調(diào)用規(guī)范的語言使用。由編程語言來負責(zé)實現(xiàn)共享代碼,而不是由 DLLs 本 身。這樣的話 DLLs 的使用受到限制。MFC 引入了另外一種 MFC 擴展 DLLs 二進制共享機制。
28、但它的使用仍受限制只能在 MFC 程序中使用。COM 通 過定義二進制標準解決了這些問題,即 COM 明確指出二進制模塊(DLLs 和 EXEs)必須被編譯成與指定的結(jié)構(gòu)匹配。這個標準也確切規(guī)定了在內(nèi)存中如何 第 8 頁 共 31 頁 組織 COM 對象。COM 定義的二進制標準還必須獨立于任何編程語言。一旦滿 足了這些條件,就可以輕松地從任何編程語言中存取這些模塊。由編譯器負責(zé) 所產(chǎn)生的二進制代碼與標準兼容。這樣使后來的人就能更容易地使用這些二進 制代碼。在內(nèi)存中 COM 對象的這種標準形式在 C+虛函數(shù)中偶爾用到,所以 這就是為什么許多 COM 代碼使用 C+的原因。但是記住,編寫模塊所用
29、的語 言是無關(guān)的,因為結(jié)果二進制代碼為所有語言可用。 此外,COM 不是 Win32 特有的。從理論上講,它可以被移植到 Unix 或其 它操作系統(tǒng),但是好像還從來沒有在 Windows 以外的地方聽說過 COM。 2.32.3接口接口 由于組件向外部隱藏了其內(nèi)部的細節(jié),因此客戶要使用組件時就必須通過 一定的機制,也就是說要通過一定的方法來實現(xiàn)客戶與組件之間的通信,這就 需要接口。所謂接口就是組件對外暴露的、向外部客戶提供服務(wù)的“連接點” 。 外部的客戶見不到組件內(nèi)部的細節(jié),它所能看到的只是接口,客戶也是通過接 口來獲取組件提供的服務(wù)。這有點像 OSI 網(wǎng)絡(luò)協(xié)議分層模型,每一層就像一個 組件,
30、它內(nèi)部的實現(xiàn)細節(jié)對于其他層是不可見的;而每一層通過“服務(wù)接入點” 向其上層提供服務(wù),這就像這里所說的接口。一般來說,接口總是固定的,也 是公開的。組件的開發(fā)人員要實現(xiàn)這些接口,而客戶則通過接口獲得服務(wù)。正 是接口的這種固定和公開,才使得組件和客戶能夠在不了解對方的情況下達成 一致。 接口提供了兩個不同對象間的一種連接。實際上計算機程序是通過一組函 數(shù)而連接起來的。這組函數(shù)實際上就定義了程序中不同部分的接口。DLL 的接 口就是它所輸出的那些函數(shù)。COM 中的接口也涉及到一組由組件實現(xiàn)并提供給 客戶使用的函數(shù)。對于 COM 來說,接口是一個包含一個函數(shù)指針數(shù)組的內(nèi)存 結(jié)構(gòu)。第一個數(shù)組包含的是一個
31、由組件所實現(xiàn)的函數(shù)的地址。對于 COM 而言, 接口就是此內(nèi)存結(jié)構(gòu),其它東西均是一個 COM 并不關(guān)心的實現(xiàn)細節(jié)。 接口的作用:在 COM 中接口就是一切。對于客戶來說,一個組件就是一 個接口集??蛻糁荒芡ㄟ^接口才能同 COM 組件打交道。從整體上講,客戶對 于一個組件可以說是知之甚少的。在某些情況下,客戶甚至不必知道一個組件 所提供的所有接口。 可復(fù)用應(yīng)用程序架構(gòu):說組件僅僅只是接口的實現(xiàn)細節(jié)當(dāng)然有點言過其實。 不管怎么說,一個未被實現(xiàn)的接口實際上什么也不能完成。但是組件可從應(yīng)用 程序中刪除并可用另外一個組合來取代之。只要新的組件支持同組件相同的接 口,那么整個應(yīng)用程序?qū)⑷匀荒軌蚬ぷ?。單個的
32、組件并不能對整個應(yīng)用程序產(chǎn) 生決定的作用。相反,用以連接組件的接口將對整個應(yīng)用程序產(chǎn)生決定性的作 第 9 頁 共 31 頁 用。只要接口保持不變,那么組件可以任意地更換。 接口同木板房中的大梁非常類似。這些大梁決定了整個房屋的結(jié)構(gòu)。同樣 可以將應(yīng)用程序所用的組件替換掉,這樣應(yīng)用程序的行為將會發(fā)生變化,但從 結(jié)構(gòu)上講,整個應(yīng)用程序并沒有發(fā)生任何變化。使用組件來構(gòu)造應(yīng)用程序的最 大的優(yōu)點在于可以復(fù)用應(yīng)用程序的結(jié)構(gòu)。如果接口設(shè)計得好的話,將可以得到 可復(fù)用極高的結(jié)構(gòu)。當(dāng)然使用接口除了可以設(shè)計出可復(fù)用的結(jié)構(gòu)外,還有其它 若干優(yōu)點。 COM 接口的其它優(yōu)點:接口使得客戶可以用同樣的方式來處理不同的組件。
33、 這種能力就被稱作是多態(tài)。這些優(yōu)點是通過接口將某個特定的行為封閉起來而 獲得的。 2.3.12.3.1 IUnknownIUnknown 接口接口 COM 中的所有內(nèi)容都起于接口,又最終歸于接口??蛻敉M件的交互都是 通過一個接口完成的。在客戶查詢組件的其它接口時,也是通過接口完成的。 這個接口就是 IUnknown。IUnknown 接口的定義包含在 Win32 SDK 中的 UNKNWN.H 頭文件中。這個接口實際上是所有的組件及客戶都知道的,但它 的名字卻表示出它是一個“未知的”接口。之所以使用這個名字主要也是為簡 單起見。所有的 COM 接口都需要繼承 IUnknown。因此若某個客戶
34、擁有一個 IUnknown 接口的指針,它并不需要知道它所擁有的接口指針到底是什么類型的, 而只需知道此接口可以用來查詢其它接口就行了。 Interface IUnknown Virtual HRESULT_stdcall QueryInterface(const IID Virtual ULONG_stdcall AddRef()=0; Virtual ULONG_stdcall Release ()=0; ; 從上面可以看出 IUnknown 有三個方法: AddRef():通知 COM 增加它的引用計數(shù)。如果進行了一次接口指針的拷貝, 就心須調(diào)用一次這個方法,并且原始的值和拷貝的值兩者都
35、要用到。 Release():通知 COM 對象減少它的引用計數(shù)。 QueryInterface():從 COM 對象請求一個接口指針。當(dāng) coclass 實現(xiàn)一個以 上的接口時,就要用這個方法。 當(dāng)使用 CoCreateInstance()創(chuàng)建對象的時候,你得到一個返回的接口指針。 如果這個 COM 對象實現(xiàn)一個以上的接口(不包括 IUnknown) ,你就必須用 QueryInterface()方法來獲得任何你需要的附加的接口指針。 第 10 頁 共 31 頁 QueryInterface()的原型如下: HRESULT IUnknown:QueryInterface ( REFIID i
36、id, void* ppv ); 以下是參數(shù)解釋: Iid:所請求的接口的 IID。 ppv:接口指針的地址,QueryInterface()通過這個參數(shù)在成功時返回接口。 2.3.22.3.2 DispatchDispatch 自動化使得用解釋性語言和宏語言訪問 COM 組件更為容易,同時用這些 語言編寫組件也將更為容易。自動化關(guān)注的是運行時的類型檢查,這一點是以 速度的犧牲和編譯時的類型檢查為代價的。 自動化不是獨立于 COM 的,而是建立在 COM 基礎(chǔ)上的。一個自動化服務(wù) 器實際上就是一個實現(xiàn)了 IDispatch 接口的 COM 組件。而一個自動化控制器則 是一個通過 IDispat
37、ch 接口同自動化服務(wù)器進行通信的 COM 客戶。自動化控制 器不會直接調(diào)用自動化服務(wù)器的那些函數(shù),而是通過 IDispatch 接口中的成員函 數(shù)實現(xiàn)對服務(wù)器中函數(shù)的間接調(diào)用。IDispatch 接口同自動化的其它所有方法一 樣,是作為 Visual Basic 的一部分開發(fā)出來的,以專門用于將一些應(yīng)用程序如 Microsoft Word 和 Microsoft Excel 自動化。Microsoft Office 的開發(fā) VBA 實際上 就是從 Visual Basic 發(fā)展來的。 通過 COM 接口提供的任何服務(wù)都可以通過 IDispatch 接口來提供。由于 IDispatch 為客戶
38、和組件提供了另外一種通信方式。有了 IDispatch 之后,COM 組件就可以通過一個標準的接口提供它所支持的服務(wù),而無需提供多個特定于 服務(wù)的接口。簡單地講,IDispatch 將接收一個函數(shù)的名稱并執(zhí)行它。 2.42.4插件插件 插件是一種遵循一定規(guī)范的應(yīng)用程序接口編寫出來的程序。插件是一類特 殊的組件。它的目的不是為一般應(yīng)用程序使用,而是專為特定的應(yīng)用程序使用。 插件的本質(zhì)是在不修改程序主體的情況下對軟件功能進行加強,當(dāng)插件的接口 被公開時,任何公司或個人都可以自己制作插件來解決一些操作上的不便或增 加一些功能。插件還可以支持多人合作開發(fā),不同的功能可以由不同的人來完 成,而且由于不同
39、插件之間互不影響,方便程序的調(diào)試和糾錯。插件一般在宿 主應(yīng)用程序上添加控制項,如菜單、工具按鍵等。插件響應(yīng)宿主程序中對這些 項目的操作,并對宿主程序中的數(shù)據(jù)進行特定操作。插件類型從廣義的范圍來 看,插件有以下三種類型: 1類似批命令的簡單插件。事實上這種插件的自由度非常低。運行這種插 第 11 頁 共 31 頁 件后,會一步步要求用戶進行選擇/輸入,最后根據(jù)用戶的輸入來執(zhí)行一系列事 先定義好的操作。這種插件一般是文本文件。功能比較單一,可擴展性極小。 優(yōu)點是插件做起來非常方便,即使是對程序設(shè)計了解不多的人也可以制作。 2使用一種特殊的腳本語言來實現(xiàn)的插件。這種插件比較難寫,需要軟件 開發(fā)者自己
40、制作一個程序解釋內(nèi)核。比如微軟惹了很多麻煩的宏就是這種類型 的。有一套著名的 Office 輔助工具就是完全用 Office 內(nèi)置的 VBScript 寫成的。 這種方法的優(yōu)點在于無需使用其它工具來制作插件,軟件本身就可以實現(xiàn),普 遍出現(xiàn)于各種辦公自動化軟件中。 3利用已有的程序開發(fā)環(huán)境來制作插件。例如 PhotoShop 等軟件使用的方 法。使用這種方法的軟件在程序主體中建立了多個自定義的接口,使插件能夠 自由訪問程序中的各種資源。這種插件的優(yōu)勢在于自由度極大,可以無限發(fā)揮 插件開發(fā)者的創(chuàng)意,這種插件是狹義范圍的插件,也是真正意義上的插件。而 這種插件機制的編寫相對復(fù)雜,對于插件接口之間的協(xié)
41、調(diào)比較困難。 3 3 WordWord 對象模型對象模型 3.13.1Word 中的對象模型(中的對象模型(Object Model) 什么是對象模型?簡單地說,用戶在 Word 中操作和改變的每一個東西都 是一個對象,這些對象的相互關(guān)系組成了 Word 中的對象模型。在 Word 中,文 檔、對話框、文本框、圖形、圖表甚至 Word 本身都是對象,同時,這些對象 都有自己的屬性和方法,因此,用戶可通過編程來訪問這些已有對象,改變它 們的屬性,以完成某些較高級的功能。在對象模型中,還有一個重要的概念是 集合(collections),所謂集合,就是由一組相近對象的組合,它們隸屬于另一 個大對象
42、,例如 sentences、words 和 characters 對象,就可看成一個集合,它們 都隸屬于 Range 對象,集合的重要屬性是我們可以對之進行整體操作,當(dāng)然也 可對集合中的某個對象進行操作。 3.23.2Word 對象模型對象模型 第 12 頁 共 31 頁 圖 1 對象模型抽象圖 Application 對象包含 Document、Selection、Bookmark 和 Range 對象。 Word 提供了數(shù)百個可與之交互的對象。這些對象包括: Application 對象 Document 對象 Selection 對象 Range 對象 Bookmark 對象 Appli
43、cation 對象表示 Word 應(yīng)用程序,是其他所有對象的父級。它的所有 成員通常作為一個整體應(yīng)用于 Word??梢允褂迷搶ο蟮膶傩院头椒▉砜刂?Word 環(huán)境。 Document 對象 Microsoft.Office.Interop.Word.Document 對象是 Word 編程的中樞。當(dāng)打開 文檔或創(chuàng)建新文檔時,就創(chuàng)建了新的 Microsoft.Office.Interop.Word.Document 對 象,該對象被添加到 Word 的 Documents 集合中。焦點所在的文檔叫做活動文 檔,由 Application 對象的 ActiveDocument 屬性表示。 4 4
44、系統(tǒng)分析和設(shè)計系統(tǒng)分析和設(shè)計 4.14.1功能需求分析功能需求分析 Word 是微軟公司的 Office 系列辦公組件之一,是目前世界上最流行的文字 編輯軟件,它無疑是現(xiàn)代辦公中使用最多的字處理軟件。現(xiàn)在已能把各種形式的 信息資料存儲到 Word 文檔中,如文字、圖片、超連接等。面對大量文檔信息, 對它們分類管理顯得尤其重要。 由于日常工作中要處理的文檔越來越多,而如果不對其分類整理將造成需 要時查找等麻煩。特別是處理文字文檔較多的工作,如財務(wù)管理,文秘等工作。 解決以上問題有兩種方法可行:一、利用 Windows 對磁盤文件、文件夾的分級 管理功能。如在 D 盤上新建幾個文件夾,分別代表各類
45、性質(zhì)的文檔。此方法解 決了對文檔的分類存儲問題,但極不方便。如在使用文檔時,只能找到某個盤 下的某個目錄,再進行新建文檔、刪除文檔、重命名文檔等操作,當(dāng)文檔多且 所分的等級較多時(就是盤符下面的文件夾級數(shù)多) ,將浪費時間,影響辦公效 率,當(dāng)要求多次重復(fù)此等操作時,更顯其弊端。二、開發(fā) Word 插件。此插件 在打開 Word 軟件時被加載,以工具檔里工具的形式出現(xiàn)。點擊此工具,就可 對文檔進行各種隨心所欲的操作,但不改變文檔內(nèi)容,也就是說此插件是基于 文檔的存儲路徑的,而不是基于文檔本身。 首先,插件基于文檔的存儲路徑,因此“存取自由”是它的一個特色。用 第 13 頁 共 31 頁 戶可將文
46、檔存放在磁盤任何地方(建議不放在本地 C 盤或桌面) ,也包括來自 網(wǎng)絡(luò)上的文檔路徑,當(dāng)磁盤空間有限的時候,可以充分體現(xiàn)這一優(yōu)勢。 其次,插件允許用戶對文檔進行任何操作。包括新建、打開、編輯、刪除 文檔等等。 此插件還有一個重要特點,就是以工具欄里的工具形式出現(xiàn),在啟動 Word 軟件時被加載。因此它很“輕量級” ,占用系統(tǒng)資源少,使用方便,容易卸載。 4.24.2數(shù)據(jù)存儲結(jié)構(gòu)分析數(shù)據(jù)存儲結(jié)構(gòu)分析 系統(tǒng)的數(shù)據(jù)存儲方式可有兩種理想的選擇:XML 和 Access 關(guān)系數(shù)據(jù)庫。 XML 提供了一套跨平臺、跨網(wǎng)絡(luò)、跨程序語言的數(shù)據(jù)描述方式,使不同系 統(tǒng)之間的數(shù)據(jù)交換更加高效。但如果從更高的技術(shù)角度出
47、發(fā),就會發(fā)現(xiàn),對 XML 文檔簡單的文件管理是遠遠不夠的:低效的存儲組織、索引查詢技術(shù),不 提供事務(wù)、安全恢復(fù)機制,無法保證數(shù)據(jù)的完整性和一致性,沒有并發(fā)控制、 移植工具等。用 XML 可方便實現(xiàn)無限層分類目錄的保存。 關(guān)系數(shù)據(jù)庫是實體間聯(lián)系是固定的,有良好的完整性支持,對具有一對多的層 次關(guān)系,更為直接的描述現(xiàn)實世界,有良好的性能,存取效率較高,建立在嚴 格的數(shù)學(xué)概念的基礎(chǔ)上,概念單一,實體與實體間的聯(lián)系都用關(guān)系表示,數(shù)據(jù) 結(jié)構(gòu)簡單、清晰,存取路徑對用戶透明,有更高的數(shù)據(jù)獨立性和更好的安全保 密性。Access 適用于小型商務(wù)活動,用以存貯和管理商務(wù)活動所需要的數(shù)據(jù)。 Access 不僅是一
48、個數(shù)據(jù)庫,而且它具有強大的數(shù)據(jù)管理功能,它可以方便地利 用各種數(shù)據(jù)源,生成窗體(表單),查詢,報表和應(yīng)用程序等。使用 Microsoft Access,可以在單一的數(shù)據(jù)庫文件中管理所有的信息。 基于系統(tǒng)需求分析和 Visual Basic 語言對 Access 數(shù)據(jù)庫的強大支持,及 Access 自身具有的便捷、易使用等特點,系統(tǒng)選用 Access 數(shù)據(jù)庫存儲相關(guān)記錄。 4.34.3數(shù)據(jù)庫設(shè)計數(shù)據(jù)庫設(shè)計 由于系統(tǒng)基于文檔存儲路徑,操作修改對象大部分對于路徑和相關(guān)記錄, 因此數(shù)據(jù)庫只對文檔的路徑和相關(guān)記錄進行存儲,而不是文檔。系統(tǒng)把記錄分 為三層,即三個部分,共三張表,分別用來存儲目錄、文件夾和
49、文檔路徑。用 表 table1 存儲目錄,表 table2 存儲文件夾,表 table3 存儲文檔記錄。如圖: 第 14 頁 共 31 頁 圖 2 數(shù)據(jù)庫表圖 目錄表 table1:用于存儲記錄的最高級目錄。包括兩列:sort_id,自動編號, 主鍵;sort,文本類型,儲存目錄名稱。 圖 3 目錄表 table1 文件夾表 table2:用于保存記錄的中間層,也就是目錄的下一層。包括三 列:fold_id,自動編號,主鍵;ref_table1_id,數(shù)字類型,外鍵,用于關(guān)聯(lián) table1 的 sort_id;fold,文本類型,用于保存文件夾記錄名稱。 圖 4 文件夾表 table2 第 1
50、5 頁 共 31 頁 文檔路徑表 table3:用于保存文檔路徑,文件夾的下一層也就是最底層。 包括四列:file_id,自動編號,主鍵;ref_table2_id,數(shù)字類型,外鍵,關(guān)聯(lián)到 table2 的 fold_id;filename,文本類型,用于保存文檔的文件名;filepath,文本 類型,用于保存文檔的存儲相對路徑。 圖 5 文檔表 table3 表之間的關(guān)系如圖: 圖 6 表關(guān)系圖 5 5 系統(tǒng)實現(xiàn)系統(tǒng)實現(xiàn) 5.15.1插件接口方法插件接口方法 當(dāng) VB 運行時,在 Add-In 菜單中裝載組件以后,VB 就會調(diào)用組件中 IDTExtensibility 對象中的 OnConn
51、ection 方法。在 OnConnection 方法里定義 Application 對象變量,并調(diào)用 CommandBars.Add 方法,就可在程序運行時加載 工具欄。 在“引用”對話框中選擇“Microsoft Office 8.0 Object library”復(fù)選框,可以通 過“對象瀏覽器”訪問并瀏覽各種命令條對象。 因為菜單和工具欄屬于相同的對象庫,它們都將通過 CommandBarControl 對象被引用。一個菜單條命令條可以包括幾個菜單項,每個菜單項本身也是一 個命令條,而且它又可以包括若干個菜單命令,每條命令依然是一個命令條。 第 16 頁 共 31 頁 利用這種模式可以很
52、容易地在開發(fā)環(huán)境中放置外接程序。 使用 commandBars 集合對象用外接程序來添加命令欄和控件。在 OnConnection 事件過程定義 Application、commandbars 對象變量,此過程創(chuàng)建 新的命令條按鈕,并返回對它的對象變量,并定義 commandbar 上按鍵的事件。 5.25.2事件響應(yīng)事件響應(yīng) 從結(jié)構(gòu)上來看,一個 VB 插件實際上是一個 COM 組件,原則上組件可以 使用支持 COM 的開發(fā)工具。組件通過實現(xiàn) COM 中的 IDTExtensibility 對象來 建立與 VB 的連接。組件注冊以后,當(dāng) VB 運行中在 Add-In 菜單中裝載組件后, VB
53、就會調(diào)用組件中 IDTExtensibility 對象中的相應(yīng)方法(如在裝載組件后會調(diào) 用 OnConnection 方法) 。這時整個插件就成為 VB 的一部分從而可以訪問 VB 開 發(fā)環(huán)境中的各種對象和資源了。 在 Client 派生一個 IDispEventImpl 類來實現(xiàn) IDispatch 接口的 Sink。在 OLE 中,連接點是指一種由調(diào)用接口的對象(稱為“源” )和執(zhí)行接口的對象(稱為 “匯” )構(gòu)成的機制。連接點執(zhí)行一個流出接口,它能夠在其他對象上開啟動作, 比如激發(fā)事件和更改通知。通過揭示一個連接點,源就允許匯建立到此源的連 接。插件接口要響應(yīng) Word 事件,需要實現(xiàn)
54、IDispEvents 接口。 圖 7 接口示意圖 1、一個 COM 組件,允許有多個連接點對象(IConnectionPoint)。也就是說 可以有多個發(fā)生“事件”的源頭。圖 7 中就有 3 個連接點。 2、管理這些連接點的接口叫“連接點容器”(IConnectionPointContainer)。 連接點容器接口特別簡單,因為只有 2 個函數(shù),一個是 FindConnectionPoint(), 表示查找你想要的連接點;另一個是 EnumConnectionPoints()。 3、每一個連接點,可以被多個客戶端的接收器(Sink)連接。 首先通過 VB 可以快速建立一個 IDTExtens
55、ibility 對象框架,其次 VB 對于 第 17 頁 共 31 頁 整個開發(fā)環(huán)境都提供了相應(yīng)的對象供插件訪問和控制,而使用插件的主要目的 就是通過插件來控制宿主程序,調(diào)試十分的方便,可以直接運行看結(jié)果,不需 要編譯注冊。 IDTExtensibility 庫提供了 5 個可用來操縱加載項以及宿主應(yīng)用程序的事件: OnConnection、OnDisconnection、OnAddInsUpdate、OnStartupComplete 和 OnBeginShutdown。由于接口是對象和 Visual Basic 之間的約定,必須確保實現(xiàn) 接口中的所有方法。這就意味著全部四種 IDTExte
56、nsibility 接口方法必須在類模 塊中提供,每一種至少包含一個可執(zhí)行語句。它能小到只有一個說明語句,但 是,它們必須至少包含一個可執(zhí)行語句,以免編譯程序把它們作為空過程刪除。 1.OnConnection 事件 OnConnection 事件在 COM 加載項加載(連接)時發(fā)生。 2.OnDisconnection 事件 OnDisconnection 事件在卸載 COM 加載項時發(fā)生??墒褂?OnDisconnection 事件過程運行能夠恢復(fù)由加載項對應(yīng)用程序所作任何更改的代碼,并執(zhí)行常規(guī) 清除操作。 3.OnStartupComplete 事件 當(dāng)宿主應(yīng)用程序完成啟動例程時,就會發(fā)
57、生 OnStartupComplete 事件,在這 種情況下,COM 加載項在啟動時加載。如果加載項未在應(yīng)用程序加載時加載, OnStartupComplete 事件就不會發(fā)生,即使用戶在“COM 加載項”對話框中加 載加載項也是如此。如果此事件確實發(fā)生,則它將在 OnConnection 事件之后發(fā) 生。 4.OnBeginShutdown 事件 在應(yīng)用程序關(guān)閉而 COM 加載項仍處于加載狀態(tài)的情況下,如果宿主應(yīng)用 程序開始其關(guān)閉例程時,就會發(fā)生 OnBeginShutdown 事件。如果應(yīng)用程序關(guān)閉 時該加載項還沒有加載,OnBeginShutdown 事件就不會發(fā)生。如果此事件確實 發(fā)生
58、,它將在 OnDisconnection 事件之前發(fā)生。 5.OnAddInsUpdate 事件 當(dāng)一組已加載的 COM 加載項發(fā)生更改時,就會發(fā)生 OnAddInsUpdate 事件。 當(dāng)某個加載項加載或卸載時,就會在任何其它已加載的加載項中發(fā)生 OnAddInsUpdate 事件。 5.35.3系統(tǒng)實現(xiàn)系統(tǒng)實現(xiàn) 基于以上背景,及對用戶需求的充分考慮和當(dāng)前工作環(huán)境及條件,將功能 總結(jié)如下:新建記錄、打開文檔、編輯記錄、刪除文檔和記錄、添加文檔記錄。 第 18 頁 共 31 頁 1.新建記錄:主要分三層結(jié)構(gòu),目錄、文件夾、文檔??蓪δ夸?、文件夾 新建,但對文檔請使用添加功能。 2.打開文檔:當(dāng)
59、在界面內(nèi)選定某個文檔后,用 WORD 打開此文檔。 3.編輯記錄:對記錄(包括目錄和文件夾)重命名。 4.添加文檔:將本地磁盤的文檔放入某個文件夾之下。 5.刪除文檔和記錄:刪除目錄或文件夾(也就是記錄) ,刪除磁盤(介質(zhì)) 上的 WORD 文檔至回收站,永久刪除磁盤上文檔。 5.3.15.3.1 添添加加 WordWord 插件插件 1、創(chuàng)建“外接程序”工程 圖 8 新建外接程序工程 2、打開“設(shè)計器”中的 Connect 設(shè)計器。 圖 9 設(shè)計器 第 19 頁 共 31 頁 雙擊該 Connect 的圖標。修改其中的工程名和應(yīng)用程序。其中,“應(yīng)用程 序”選擇該插件是針對哪個具體的應(yīng)用程序的
60、。這里選 Microsoft Word。注意: 這里列出的應(yīng)用程序都要求插件提供同一種接口:IDTExtensibility2。 3、添加對 Word 類型庫的引用 系統(tǒng)缺省添加了對 Office 類型庫的引用。由于開發(fā)的是 Word 插件,因此 需要存取 Word 中的對象。所以必須添加對 Word 的引用。工程-引用,選定 Microsoft Word 11 Object Library。 4、打開該設(shè)計器的代碼窗口。 設(shè)計器的代碼就是插件接口方法的實現(xiàn)。同 VC 中一樣,IDTExtensibility2 有 5 個方法需要實現(xiàn)。但 VB 中不需要添加特殊代碼的方法,沒有必要定義其 過程
61、。系統(tǒng)編譯時自動添加。 5、調(diào)試 設(shè)置該工程的屬性,將“調(diào)試”中的啟動程序設(shè)置為本地的系統(tǒng)中安裝 Office WinWord.exe 的絕對路徑:例如 C:Programe FilesMicrosoft OfficeOFFICE11WINWORD.EXE。VB 中調(diào)試時結(jié)束后,自動刪除插件的注冊 項。因而獨立打開 Word 時,并沒有出現(xiàn)插件的工具欄。 5.3.25.3.2 添加添加 WordWord 工具欄工具欄 (1)刪除系統(tǒng)缺省添加的代碼。 系統(tǒng)缺省添加的代碼是針對 VB 插件的,而不是 Word 或其它應(yīng)用程序插 件的。因此刪除它們。并在程序頂部添加以下代碼: Option Expl
62、icit Private mAppWord As Word.Application 定義 word 對象變量 Private mBar As Office.CommandBar 定義工具欄對象變量 定義工具欄上按鈕對象變量和事件響響應(yīng)程序 Private WithEvents mBtn1 As Office.CommandBarButton (2)添加 AddinInstance 對象的 OnConnection 方法。 AddinInstance 就代表了該插件本身。 在其中添加代碼,以便在 Word 中添加工具欄和按鍵,代碼: Private Sub AddinInstance_OnCon
63、nection (ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom () As Variant) Set mAppWord = Application Set mBar = mAppWord.CommandBars.Add(“word manager“, , , True) Set mBtn1 = mBar.Controls.Add(Office.MsoControlType.msoControlBut
64、ton) 第 20 頁 共 31 頁 SetButtonStyle(mBtn1,203,“Button1“,“Testtoaddabuttoninword“,msoButtonIco nAndCaption) End Sub 按鍵對象定義為 WithEvents,這樣可以添加它的事件處理代碼: Private Sub mBtn1_Click (ByVal Ctrl as Office.CommandBarButton, CancelDefault as Boolean) Dim doc As Word.Document 操作 word 對象 Form1.Show 取 Word 的當(dāng)前活動文檔,
65、顯示 Form1 窗 體 End Sub 5.3.35.3.3 連接數(shù)據(jù)庫連接數(shù)據(jù)庫 在 Visual Basic6.0 中,可使用三種數(shù)據(jù)訪問接口,即 ActiveX 數(shù)據(jù)對象 (ADO) 、遠程數(shù)據(jù)對象(RDO)和數(shù)據(jù)訪問對象(DAO) 。數(shù)據(jù)訪問接口是一 個對象模型,代表了訪問數(shù)據(jù)的多種方法。ADO 又稱 OLE 自動化接口,采用 了類似 DAO 和 RDO 的約定和特性,從而使其更易手于使用,它是由 Microsoft 推出的最新、功能最強,且容易使用的數(shù)據(jù)訪問實例(OLE DB)的應(yīng)用程序接 口。OLE DB 可以極高的性能訪問數(shù)據(jù)源,其中包括關(guān)聯(lián)和非關(guān)聯(lián)數(shù)據(jù)庫、電 子郵件和文件系統(tǒng)
66、、文本和圖形、定制商業(yè)對象等。 其中 ADO 是最新的,它最簡單也最靈活。因此,此系統(tǒng)使用 ADO 作為數(shù) 據(jù)訪問接口。 數(shù)據(jù)庫控件使用:ADO Data 控件使用 Microsoft ActiveX Data 對象 (ADO)快速創(chuàng)建數(shù)據(jù)綁定控件和數(shù)據(jù)提供者之間的連接。能夠執(zhí)行數(shù)據(jù)綁定 的 ActiveX 控件包括 DataGrid、DataCombo、Chart 和 DataList。 DataCombo 和 DataList 控件都有五種特殊的屬性: 1.DataSource:DataComno 和 DataList 控件被綁定的 ADODC 控件的名稱 2.DataField:由 DataSource 屬性所指定的記錄集中的字段名稱。 3.RowSource:將要用于填充列表的 ADODC 的名稱。 4.BoundColumn:由 RowSource 屬性指定的記錄集中的字段名稱。該字段 必須與用來更新列表的 DataField 的類型相同。 5
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版六年級數(shù)學(xué)上冊第三單元分數(shù)除法-練習(xí)十課件
- 語文中考專題訓(xùn)練——對聯(lián)
- SIE_AR模塊業(yè)務(wù)與表結(jié)構(gòu)培訓(xùn)ppt課件
- 蘇教版物理九年級上冊第十二章《機械能和內(nèi)能》復(fù)習(xí)使用課件
- 156測量小燈泡的電功率課件
- 北師版一年級數(shù)學(xué)上冊第七單元——古人計數(shù)(2課時)課件
- 中心靜脈導(dǎo)管CVC維護課件
- 《城市軌道交通客運服務(wù)心理學(xué)》--第6章---個性課件
- 《文學(xué)部落》課件-實用優(yōu)秀
- 2022版《重力》課件-(特等獎)人教版八下物理-1
- 第4章出行的發(fā)生與吸引
- 25伯牙絕弦【課件2】剖析
- 加工貿(mào)易聯(lián)網(wǎng)電子賬冊簡介概要ppt課件
- 企業(yè)診斷與策劃課件1
- 2023年四年級數(shù)學(xué)下冊7小數(shù)的加法和減法1小數(shù)的加法和減法第2課時小數(shù)的加法和減法2上課課件西師大版