程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 第八章-對象鏈接與嵌入(一)(2)

第八章-對象鏈接與嵌入(一)(2)

編輯:Delphi

8.2 設計狀態OLE對象的創建  

Dephi可以在設計狀態和運行狀態中創建OLE對象。本節介紹設計狀態OLE對象的創建。 

8.2.1 TOLEContainer部件 

要創建OLE對象,需在窗體中加入OLE包容器部件。 應用程序部件包含鏈接或嵌入的對象。用該部件可顯示在OLE服務器編輯的數據。部件的ObjClass,ObjDoc,ObjItem 屬性分別定義OLE類、文件、項目。要定義OLE對象是否本地激活,使用InPlaceActive 屬性。如果OLE對象可以本地激活,OLE服務器菜單將與OLE應用程序的菜單進行融合,GroupIndex屬性的值將決定菜單融合情況。 

8.2.2 OLE對象創建的步驟: 

1.在窗體中增加OLE包容器部件;

2.在Object inspector中單擊ObjClass或ObjDoc屬性的省略按鈕,將出現插入對象對話框;

3.如果要插入的OLE 對象已存儲在文件中,選擇“Creat From File”,而後定義該對象的文件名和路徑名。如果是鏈接對象,則選擇鏈接檢查框。 如果是嵌入對象,選擇“Creat new”,並在對象類型列表框中選擇OLE對象;

4.選擇OK按鈕;

如果是創建新對象,OLE服務器將激活,則可對OLE對象進行編輯,完成編輯後關閉OLE服務器。典型的例子是單擊服務器中的“File”或“File|Update”菜單。

5.此時ObjClass屬性中包含了相應的值,如果OLE對象從已存在的文件中創建或插入一

個鏈接對象,ObjDoc屬性包含了OLE文件。

在設計對象狀態時也可以粘貼OLE對象,其步驟如下:

1.激活服務器應用程序,選擇OLE包容器部件;

2.在服務器中,將數據或對象拷貝到剪切板;

3.進入Delphi集成開發環境,選擇OLE包容器部件;

4.在 Object inspector窗體中選擇ObjItem屬性的省略(…)按鈕;

5.在列表中選擇OLE對象;

6.選擇“Paste"創建一個嵌入對象或選擇"Pastelink"創建鏈接對象;

7.選擇OK。

OLE包容器部件在此時初始化。如果粘貼一個嵌入對象,ObjClass屬性將包含適當的值。如果粘貼一鏈接對象,ObjClass,ObjDoc,ObjItem屬性將全部定義。OLE 應用程序部件包含代表OLE對象的圖片。

如果OLE服務器程序支持OLE對象的拖放功能,則在設計狀態從服務器中拖動對象至應用程序,應用程序將創建鏈接對象,具體步驟:

1.激活服務器,並Delphi集成開放環境中選擇要鏈接的對象;

2.按隹鼠標左鍵拖動OLE對象至設計狀態的窗體;

3.松開鼠鍵釋放OLE對象。

窗體將創建OLE應用程序並進行初始化。 

8.3 OLE應用程序的開發 

Delphi可以在設計狀態和運行狀態創建OLE對象,上一節介紹的是在設計狀態如何創建OLE對象,這一節將通過例程介紹如何在運行狀態創建OLE對象、粘貼對象、拖動對象,以及OLE 對象的文件操作。我們開發的 OLE.dpr是一個OLE應用程序的實例

8.3.1 OLE應用程序界面開發 

OLE.dpr采用了多文檔界面,父窗體有菜單,工具條,狀態條,子窗體有一個OLE包容器部件,下面分別加以介紹。 

8.3.1.1 OLE應用程序的菜單 

OLE應用程序的菜單與其它應用程序的主菜單大體一致,如果應用程序中有支持本地激活的OLE 2.0對象,則要進行菜單融合。查閱OLE 服務器的資料可知道服務器是否支持本地激活。

OLE應用程序菜單的GroupIndex屬性決定融合菜單的位置,即融合菜單是更換主菜單,還是插入至應用程序的主菜單中。

OLE服務器,將融合三組菜單:Edit,View,Help,每組菜單分配了唯一的組索引值。在OLE應用程序中任何索引值為1,3,5的菜單組在菜單融合時被OLE服務器中具有相應索引值的菜 單更換。在本例程中,編輯菜單項在菜單融合時被服務器的"Edit"替換。如圖8.3。 要想保存應用程序中的菜單,分配有異於1,3,5的索引值。

表8.3 融合後的菜單

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

菜單  索引值    功能描述       來源(OLE激活時)

────────────────────────────────

文件   0   使用文件和退出程序      OLE應用程序

Edit 1 編輯OLE對象         OLE服務器

對象   2 操作未激活的OLE對象     OLE應用程序

View 3 修改OLE對象的觀測方式    OLE服務器

窗體  4 操縱窗體           OLE應用程序

Help 5 訪問服務器在線幫助      OLE服務器

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

8.3.1.2 OLE工具條和狀態條 

當OLE對象被本地激活時,OLE服務器將試圖用自己的工具條和狀態條替換OLE應用程序的。如果應用程序想要本地激活, 就應該在應用程序中編寫相應的代碼讓服務器使用工具條和狀態條。要做到這點,必須:

● 設置工具條和狀態條

● 在應用程序中加入狀態條

 通過修改面板部件的屬性創建工具條和狀態條。

當OLE對象被本地激活時,面板或其他對齊控制將與OLE服務器程序進行協調。 這意味

OLE服務器可以替換OLE應用程序窗體中任何對齊控制,但鎖定的控制不能被替換。例如,

如果面板的align屬性是alTop,alleft,alBottom,alIngh時,控制未鎖定,OLE服務器可以替換。要使應用程序的工具條、狀態條不被替換,可將locked屬性設置成真值。

當OLE 對象被激活,OLE 服務器在狀態條中顯示有關信息時,OLE 應用程序部件的OnStatusLineEvent事件發生,一個文本字符會將從OLE服務器傳至該事件句柄。 OnStatusLineEvent事件句柄的MSG參數接受文本字符。

以下代碼用以狀態條接收OLE服務器的信息:

procedure TOLEObjectForm.OleContainerStatusLineEvent(Sender: TObject;

Msg: String);

begin

OLEFrameForm.StatusBarPanel.Caption := Msg

end; 

8.3.2 插入OLE對象  

運行狀態時進行對象鏈接與插入也要用到插入對話框,Delphi中沒有插入對話框部件,但可調用InsertOLEObjectDlg 函數來顯示對話框。 

8.3.2.1 InsertOLEObjectDlg函數聲明如下: 

function InsertOleObjectDlg(Form: TForm; HelpContext: THelpContext;

var PInitInfo: Pointer): Boolean;

其中參數Form是擁有插入對話框的窗體,一般將擁有OLE包容器部件的窗體名字傳給Form.

參數Helplontext為插入對象對話框定義在線幫助,如果應用程序沒有在線幫助, HelpContext的值為零,對話框中將不出現幫助按鈕。

參數PInitInfo是一個無類型指針,該指針指向一個包含初始化OLE 部件信息的內部數據結構。InsertOLEObjectDlg修改這個指針以指向一個有效的數據結構,該結構包含了對話框列表中被選擇的OLE 對象初始化信息。當該指針被使用後,應調用ReleaseOLEInitInfo過程釋放初始化信息所占用的內存。

當用戶選擇OK 按鈕關閉插入對象對話框,InsertOLEObjectDlg 返回真值,並把 PInitInfo指向包含OLE對象的初始化信息的數據結構。 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved