但不管妳有沒有接觸過它,相信妳看了下面的內容,會對妳有所幫助的.
VFP的OLE技術應用詳解
VisuaLFoxPro3.0(以下簡稱VFP)使用了OLE2.0技術,使VFP應用程序的適應能力大為加強。
VFP提供兩種類型的OLE對象:壹種是OLE控件(.OCX文件),這是壹種自定義控件,通常在WINDOWS\SYSTEM目錄下,擁有自己的事件、方法,類似於VFP的基本類,這種控件可以用VC、VB5.0、DeLphi、SDK2.0等編程工具開發。VFP缺省提供了四種可供使用的OLE控件,即通信(MSCOMM32.OCX)、消息應用程序接口MAPI(MSMAPI32.OCX)、OutLine(MSOUTL32.OCX)和圖片裁剪(PICCLP32.OCX);另壹種是可插入型OLE對象,這是由其他應用程序創建的,它們沒有自己的事件集合。這壹種可插入型OLE對象又可分為限制性可插入型OLE對象和非限制性可插入型OLE對象。
VFP提供兩種引用OLE對象的途徑都是通過VFP中的控件實現的:壹種是通過OLE容器控件鏈接或嵌入對象,OLE容器控件可以引入OLE控件和非限制性可插入型OLE對象;另壹種是通過OLE綁定型控件鏈接或嵌入數據表的通用類型字段中所存放的OLE對象,這通常是些限制性可插入型OLE對象。
在VFP中OLE對象是通過鏈接或嵌入操作方式進行操作的。鏈接和嵌入操作之間的區別在於OLE對象所存放的地點:鏈接操作中的OLE對象仍然存放在創建它的源文件中數據表或表單僅僅存儲源文件的位置,即壹個指針,在更改源文件時,被鏈接的OLE對象將被及時更新。被鏈接的OLE對象始終保持著與源文件之間的聯系,除非人為斷開這種聯系;嵌入操作的OLE對象只能存儲在數據表或表單中。這些OLE對象不與創建它的源文件保持聯系。如果源文件做了更改,它們不會自動反映在VFP應用程序中,除非妳再次進行嵌入操作。鏈接操作通常用於如下場合:OLE對象(數據或圖形)可能被經常更改、應用程序必須包含最新版本的OLE對象、存放OLE對象的源文件可以在計算機之間或通過計算機網絡進行更新、存放OLE對象的源文件必須被其他應用程序***享。嵌入操作通常用於如下場合:應用程序不需要具有最新版本的OLE對象、嵌入的OLE對象不需要被多個應用程序使用、源文件在被鏈接後不會被更新。
要註意的是VFP本身只是壹個OLE客戶機,而不是壹個OLE服務器。
使用OLE對象
在應用程序中使用OLE對象首先要考慮OLE對象的類型,針對不同類型的OLE對象,使用不同的方法來引用它們。當程序中要引用的可插入型OLE對象較多時就要考慮用數據表的通用型字段來存儲它。
1、在VFP的數據表中添加OLE對象
方法壹:使用數據表設計器給數據表添加壹個通用型字段,然後將可插入型OLE對象鏈接或嵌入到通用型字段的每個記錄中。通用字段包含壹個10字節的指針,它指向該字段真正的內容,通用型字段的真正類型和數據大小取決於創建這些對象的OLE服務器。這些OLE對象是以鏈接方式還是以嵌入方式進行操作與該應用程序有關。若OLE對象是以鏈接方式進行操作的,則數據表中只含有對OLE對象的引用,以及創建這些OLE對象的應用程序的引用;若OLE對象是以嵌入方式進行操作的,數據表中將含有相關OLE對象的副本,以及對創建這些OLE對象的應用程序的引用。通用字段的大小僅受可用磁盤空間的限制。
方法二:使用APPENDGENERAL命令從文件中導入OLE對象並將其放入通用型字段中。語法:
APPENDGENERALGeneraLFieLdName
〔FROMFiLeName FROMMEMOPictureFieLd?Name〕
〔DATAcExpression〕
〔LINK〕
〔CLASSOLECLassName〕
2、使用限制性可插入型OLE對象
使用通用型字段中所存儲的限制性可插入型OLE對象需要使用OLE綁定型控件,步驟如下:
(1)在表單設計器中,將壹個OLE綁定型控件添加到表單中。
(2)通過設置對象的ControLSource屬性指定包含OLE對象的通用型字段。如果數據表名為Inventory,通用型字段名為Current,那麽可以將ControL?Source屬性設置成Inventory.Current。
(3)在表單上添加按鈕或菜單命令,用以瀏覽ControLSource屬性指定的通用型字段。
3、使用OLE控件(.OCX文件)及非限制性可插入型OLE對象
這兩類對象需要使用OLE容器控件。OLE容器控件允許向應用程序中加入OLE對象,包括OLE控件(.OCX文件)、非限制性可插入型OLE對象。OLE容器控件與OLE綁定型控件不同在於,它不與VFP表的壹個通用型字段相連接。
若要在表單中添加OLE控件及非限制性可插入型OLE對象可按如下步驟進行:
(1)在表單設計器中,向表單中添加壹個OLE容器控件。
(2)在“InsertObject”對話框中,選擇“CreateNew”或“CreatefromFiLe”或“InsertControL”選項。
(3)從顯示的列表中選擇適當的OLE控件或創建適當類型的對象或增加壹個嵌入文件。
在插入控件時如果所要的控件沒有出現在列表中,可選擇“AddControL”按鈕將其添加到列表中。也可以通過將OLE控件添加到表單控件工具欄中而將其添加到表單中。在選項對話框中選擇控件之後,單擊表單控件工具欄上的“ViewCLass”按鈕,從子菜單中選擇“OLEControL”,單擊OLE,然後拖動控件,在表單上設置其大小。下面以壹例子說明如何在程序中使用非限制性可插入型OLE對象,本例首先將壹個OLE容器控件加入表單,然後使用OLE容器控件的OLECLass和DocumentFiLe屬性將MicrosoftExceL作為OLE服務器,並將壹個ExceL工作簿指定為要編輯的文件。DocumentFiLe屬性指定了在C驅動器中ExceL路徑下壹個名為BOOK1.XLS的工作簿。如果在DocumentFiLe屬性中指定的文件或路徑不存在,則本例程不能正常運行,這時需要修改DocumentFiLe來指明壹個存在的路徑和工作簿文件。另外BOOK1.XLS只能讀不能修改,下面是其VFP源代碼及其說明。
frmMyForm=CREATEOBJECT(′Form′)&&創建表單
frmMyForm.CLosabLe=.F.&&廢止控制菜單框
frmMyForm.AddObject(′cmdCommand1′,′cmdMyCmdBtn′)
frmMyForm.AddObject(〃oLeObject〃,〃oLeEx?ceLObject〃)
frmMyForm.cmdCommand1.VisibLe=.T.
frmMyForm.oLeObject.VisibLe=.T.
frmMyForm.oLeObject.Height=50
frmMyForm.Show
frmMyForm.oLeObject.DoVerb(-1)
READEVENTS
DEFINECLASSoLeExceLObjectasOLEControL
OLeCLass=〃ExceL.Sheet〃
DocumentFiLe=〃C:\EXCEL\BOOK1.XLS〃
ENDDEFINE
DEFINECLASScmdMyCmdBtnASCommand?Button
Caption=′\ CanceL=.T.
Left=125
Top=210
Height=25
PROCEDURECLick
CLEAREVENTS
ENDDEFINE
4、使用OLE對象的屬性
OLE對象有壹系列屬性可供使用,但是對包含在OLE容器控件中的OLE對象,要確保引用的是OLE對象的屬性而不是其容器的屬性,這需要將容器的Ob?ject屬性加到OLE對象名當中。
5、使用OLE對象的方法
除了設置和讀取OLE對象的屬性外,還可以使用OLE對象的方法來操作OLE對象。例如,下面的程序使用了Ex?ceL對象的Add方法來創建ExceL工作簿,然後使用Save方法保存該工作簿,並使用Quit方法結束ExceL的本次運行:
oLeApp=CREATEOBJECT(”Ex?ceL.AppLication”)
oLeApp.VisibLe=.T.
oLeApp.Workbooks.Add
oLeApp.CeLLs(1,1).VaLue=7
oLeApp.ActiveWorkbook.SaveAs(”C:\TEMP.XLS”)
oLeApp.Quit
與使用屬性壹樣,如果用容器控件創建對象,應確保將“Object”加到引用對象方法的控件名稱當中。
6、訪問集合中的OLE對象
壹個對象類型可以代表單個對象或若幹相關對象的集合。
在程序中,集合是壹個未經排序的鏈表結構,每當有對象被添加到集合中或從集合中移去時,其余對象的位置都可能改變。使用集合的Count屬性對集合遍歷,可以訪問集合中的所有對象。Count屬性可用來返回集合中項的數目。另外,可以使用Item方法返回集合中的某壹項。
也可以訪問集合內的集合。例如,使用下列程序代碼可以在壹個單元格區域內訪問某壹單元格集合:
oLeApp=CREATEOBJECT(”ExceL.sheet”)
oLeApp.Range(oLeApp.CeLLs(1,1),oLeApp.CeLLs(10,10)).VaLue=100
7、使用OLE對象的數組利用OLE技術,不但可以將數組傳遞給OLE對象的方法,而且可以接收OLE對象傳來的數組。傳遞數組的方式必須是按引用傳遞,即必須在數組名前加@符號(用VFP不能將二維以上的數組傳遞到OLE對象中)。例如,要發送壹個VFP數組到ExceL中,可以使用以下程序代碼。它先在VFP中創建壹個數組,給數組賦壹些值,然後啟動ExceL,創建壹個工作簿,並給工作表的第壹個單元格設置壹個初始值,再將此值復制到數組中的其他工作表中:其中用到了ExceL的工作簿集(Workbooks對象),工作表集(Sheets對象)的相關屬性及方法和ExceL對象的GetCustomListContents方法。下列代碼將數組傳遞給方法FiLLAcrossSheets,以便將Sheet1中的第壹區域內容復制到其它工作表的相同區域。
DIMENSIONaV(2)
aV(1)=〃Sheet1〃
aV(2)=〃Sheet2〃
oLeApp=CREATEOBJECT(〃Ex?ceL.AppLication〃)
oLeApp.Workbooks.Add
oLeI=oLeApp.Workbooks.Item(1)
oLeI.Sheets.Item(1).CeLLs(1,1).VaLue=100&&初始值
oLeI.Sheets(@aV).FiLLAcrossSheets(oLeI.Worksheets(〃Sheet1〃).CeLLs(1,1))
oLeApp.VisibLe=.T.
下列代碼將壹個數組返回到VFP,並顯示數組的內容:
oLeApp=CREATEOBJECT(〃Ex?ceL.AppLication〃)
aOLeArray=oLeApp.GetCustomListContents(1)&&改變數組下標可以顯示其它內容
FORnIndex=1toALEN(aOLeArray)
?aOLeArray(nIndex)
ENDFOR