OLE自動(dòng)化技術(shù)在Delphi與MapInfo集成地圖開(kāi)發(fā)中
摘要:本文論述了利用OLE 自動(dòng)化技術(shù)和可視化編程工具Delphi 來(lái)實(shí)現MapInfo 地圖的集
成,并通過(guò)例程的方式介紹了集成地圖的方法以及對MapInfo 的消息回調。從而實(shí)現了
MapInfo 集成到Delphi 應用系統中,達到高效開(kāi)發(fā)應用型GIS(地理信息系統)軟件的目的。
關(guān)鍵詞: 地理信息系統;OLE;MapInfo;Delphi;回調
The Application Of OLE Automation Technology In Map-integration Between Delphi And MapInfo TONG Gang, SHEN Qing-hua,BI Wei-zhun (College of Automation and Electronic, Qingdao University of Science and Technology, Qingdao 266042, China)
Abstract :The method of realizing map-integration between Delphi and MapInfo using OLE automation technology is discussed, and the method of Map Integration and the Callbacks of MapInfo message is also introduced with example in this article. So MapInfo is integrated in application of Delphi to develop efficiently applied GIS(Geographical Information System).
Key words:GIS ;OLE ;MapInfo ;Delphi ;Callbacks
1 引言
在Windows系統中,MapInfo二次開(kāi)發(fā)方法主要有兩種,即利用自身所帶的開(kāi)發(fā)工具
MapBasic和利用諸如 Delphi、VC等優(yōu)秀開(kāi)發(fā)工具。利用MapBasic 這樣自帶的開(kāi)發(fā)工具開(kāi)
發(fā)出來(lái)的程序必須在MapInfo環(huán)境中運行,系統資源開(kāi)銷(xiāo)大,開(kāi)發(fā)效率不高,功能也不強,
難以開(kāi)發(fā)界面友好而功能強大的定制程序,他較適合擴展MapInfo的功能。利用Delphi之類(lèi)
的優(yōu)秀開(kāi)發(fā)工具進(jìn)行二次開(kāi)發(fā),后臺對地圖的處理依然采用MapInfo支撐軟件,但由于前臺
采用了Delphi這樣的專(zhuān)業(yè)開(kāi)發(fā)工具,在開(kāi)發(fā)效率、開(kāi)發(fā)能力、漢化、移植性等方面都優(yōu)于自
帶的工具,同時(shí)能隨整個(gè)軟件開(kāi)發(fā)行業(yè)的發(fā)展不斷發(fā)展[1]。此種方法的關(guān)鍵是前臺定制程序
與后臺MapInfo之間的結合方式。目前主要有利用OLE Automation 和利用MapX標準組件進(jìn)
行開(kāi)發(fā)。
Delphi是美國INPRISE公司的面向對象的可視化軟件開(kāi)發(fā)工具,具有非常強大的功能,
可以快速、高效地開(kāi)發(fā)出基于Windows環(huán)境下的各類(lèi)程序,尤其是在界面設計、數據庫編程
等方面具有獨到之處。面向對象和可視化設計是其最突出的優(yōu)點(diǎn),同時(shí),它具有強大的編譯
能力,從而大大提高了程序的執行效率,成為眾多程序員的開(kāi)發(fā)工具。
2 OLE 自動(dòng)化技術(shù)
OLE(Object Linking and Embedding)是美國Atduscorporation提出的一組協(xié)議和函數,
目的是為了簡(jiǎn)化復合文件的建立和維護,它是微軟Windows系統中最為復雜的子系統,是進(jìn)
程間通信的一種形式。所謂對象鏈接是指一個(gè)復合文件內含一個(gè)參考指針引用到其它應用程
序的對象,透過(guò)OLE把Windows各個(gè)應用程序連接起來(lái)。
利用這種能使用戶(hù)共享不同應用程序信息資源的OLE技術(shù),可以很容易地集成各類(lèi)應用
程序。OLE自動(dòng)化是一種為WINDOWS設計的交互進(jìn)程通信機制,它允許在不同的應用程序
之間相互訪(fǎng)問(wèn),可以讓一個(gè)應用程序訪(fǎng)問(wèn)另一個(gè)應用程序或DLL(動(dòng)態(tài)鏈接庫),如在Delphi中創(chuàng )建EXCEL中的表格等,而且可以訪(fǎng)問(wèn)這些應用程序對象的方法(Method)與屬性
(Property),它克服了鏈接和嵌套中存在的缺點(diǎn),即無(wú)法用編程手段對對象進(jìn)行控制,實(shí)現
了對OLE組件的編程式控制。OLE 自動(dòng)化包括兩部分應用程序:一個(gè)是把OLE 組件顯現出
來(lái)使之可控制的應用程序,叫做OLE 自動(dòng)化服務(wù)器;另一個(gè)是利用OLE服務(wù)器提供的組件,
對該對象進(jìn)行控制操作的應用程序,叫做OLE客戶(hù)。由于OLE 自動(dòng)化服務(wù)器很小,程序的
穩定性以及開(kāi)發(fā)和維護都要優(yōu)于傳統的大程序。對于每個(gè)OLE對象的屬性和方法,程序員可
以決定將OLE自動(dòng)化服務(wù)器的某些屬性和方法通過(guò)OLE 自動(dòng)化表現出來(lái),而私有對象對于
外部用戶(hù)來(lái)說(shuō)是不可見(jiàn)的,但是OLE客戶(hù)編程人員只需知道包含對象的應用程序的名稱(chēng)、對
象的類(lèi)的名稱(chēng)和想要使用的屬性和方法的名稱(chēng),就可以使用自動(dòng)化服務(wù)器了[3]。通過(guò)OLE自
動(dòng)化技術(shù),運用Delphi語(yǔ)言可以很方便地進(jìn)行地圖集成,此時(shí),Delphi程序即為客戶(hù)程序。
3 利用OLE 自動(dòng)化技術(shù)實(shí)現地圖集成
進(jìn)行 Delphi 與MapInfo 的集成開(kāi)發(fā)時(shí),可以將Delphi 作為OLE 自動(dòng)化的控制方或DDE
的客戶(hù),把MapInfo 置于后臺運行,但最好采用OLE 自動(dòng)化方式,因為這種方式比DDE
方式更快、更可靠,并且在調試運行中可以獲得更多出錯信息。OLE 自動(dòng)化是Windows 程
序之間相互操作的技術(shù),可以創(chuàng )建自動(dòng)化客戶(hù)程序來(lái)操縱其他程序,而MapInfo 則可以作為
OLE 對象的服務(wù)器,并提供了一套相應的方法。
3.1 實(shí)現Delphi 取得對MapInfo Professional 的控制和服務(wù)
Delphi 程序中通過(guò)特定的ActiveX 控制接口,執行相應接口方法函數,MapInfo
Professional 發(fā)出控制命令,取得其服務(wù),達到操縱嵌入在Delphi 程序界面上的MapInfo 圖
形資料的目的。對于此技術(shù)點(diǎn)可以利用Delphi 對ActiveX(OLE)支持的函數啟動(dòng)和控制
MapInfo Professional 運行。OLE 自動(dòng)化是Windows 程序之間相互操作的技巧, Delphi 完全
支持OLE 自動(dòng)化操作,可以創(chuàng )建自動(dòng)化客戶(hù)程序來(lái)操作其他的程序,而MapInfo 則可以作
為OLE 對象的服務(wù)器,并提供了相應的一套方法,Delphi 通過(guò)建立一個(gè)OLE 對象來(lái)創(chuàng )建客
戶(hù)自動(dòng)化程序,要創(chuàng )建OLE 對象,需調用CreateOLE—Object 函數(在comObj 單元中定義),
并且把返回結果賦給一個(gè)Variant 類(lèi)型的變量,以后程序就通過(guò)這個(gè)變量來(lái)訪(fǎng)問(wèn) OLE 對象。
這時(shí)的Delphi 程序是ActiveX (OLE)客戶(hù)應用程序,控制MapInfo Professional 運行, 在后
臺運行的MapInfo Professional 是ActiveX (OLE)自動(dòng)化服務(wù)器,為Delphi 程序提供服務(wù)。
Delphi 與MapInfo Professional 的結合方式如圖1。
圖1 Delphi 與MapInfo Professional 的結合方式
Fig.1 Combination of MapInfo Professional and Delphi
3.2 Delphi 應用程序與MapInfo 的集成
(1)建立MapInfo 自動(dòng)化對象
Delphi 創(chuàng )建客戶(hù)自動(dòng)化程序是通過(guò)建立一個(gè)OLE 對象來(lái)實(shí)現的,要創(chuàng )建OLE 對象,需
調用CreateOLEObject 函數(在OLEAUTO 單元中定義),并把返回結果賦給一個(gè)Variant 類(lèi)
型的變量,以后程序就通過(guò)這個(gè)變量來(lái)訪(fǎng)問(wèn)OLE 對象。設變量名為Olemapinfo,其具體語(yǔ)句
如下:
var OleMapInfo:Variant;//在Delphi 應用程序中聲明OLE Variant 類(lèi)型的變量
Olemapinfo:=CreateOleobject(‘mapinfo.application’);//創(chuàng )建OLE 對象
pid控制相關(guān)文章:pid控制原理
評論