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

第八章-對象鏈接與嵌入(二)(1)

編輯:Delphi

8.3.5.2 在應用程序中釋放OLE對象 

當一個對象釋放到一個窗體,該窗體發生OnDragDrop 事件。該對象定義為TDragDropEvent方法中的Source參數,而TDragDropEvent 方法是用來處理OnDragDrop事件”。 如果Source 是一個OLE 對象, 那麼它是TOLEDropNotify 對象的派生類型。 TOLEDropNotify對象有一個與OLE包容器部件PInitInfo屬性相對應的PIniInfo屬性。 如果一個OLE對象被釋放。PInitInfo指向OLE對象的初始化信息結構。要實現釋放功能。只需將TOLEDropNotify的PInitInfo屬性賦給OLE包容器部件的PInitInfo屬性。

以下為處理OnDragDrop事件的代碼: 

procedure TOLEFrameForm.FormDragDrop(Sender, Source: TObject; X,

Y: Integer);

var

NewChild: TOLEObjectForm;

begin

if Source is TOLEDropNotify then

begin

NewChild := CreateChild;

with Source as TOLEDropNotify do

NewChild.OLEContainer.PInitInfo := PInitInfo

end

end; 

注意不要用ReleaseOLEInitInfo釋放分配給PInitInfo屬性的內存。Delphi自動釋放這塊內存。 

8.3.6 文件中的OLE對象 

在OLE應用程序中,要保存對OLE對象的修改,需將對象數據保存在文件中。 如果對象是鏈接的數據,Delphi將自動的保存在源文件中。當對象被修改時,文件中的數據自動修改。 如果對象是嵌入的,數據貯存在應用程序程序的窗體。要保存對嵌入對象的修改, 應用程序應把數據保存在特殊的OLE文件中。如果要對已存文件的對象進行編輯,應用程序必須從文件中裝入OLE對象。

OLE包容器部件的SaveToFile方法可保存對象: 

OleCntainer1.SaveToFile('C: \SALEs.OLE'); 

OLE包容器部件的loadFromFile方法可把文件中的對象裝入OLE包容器部件。 

OleContainer1.loadFromFile('C:\SALEs.OLE')

本章例程使用了保存對話框和打開對話框來實現運行狀態的對象保存和對象裝入。

在OLEObjectForm窗體加入保存對話框部件和打開對話框部件。其主要屬性如表8.4: 

表8.4 保存對話框的屬性及取值:

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

 屬性        值

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

Name SaveAsDialog

DefaultExit ole

FileName .OLE

Filter OLE files (*.OLE)|*.OLE

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

表8.5 打開對話框的屬性及取值

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

屬性        取值

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

Name OpenDialog

DefaultExit ole

FileName .OLE

Filter OLE files (*.OLE)|*.OLE

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

用戶單擊“文件|保存”菜單項實現OLE對象的保存。代碼如下: 

procedure TOLEObjectForm.SaveAs1Click(Sender: TObject);

begin

if SaveAsDialog.Execute then

OLEContainer.SaveToFile(SaveAsDialog.Filename)

end; 

用戶單擊“文件|打開”菜單項實現對象文件裝入: 

procedure TOLEFrameForm.Open1Click(Sender: TObject);

var

NewChild: TOLEObjectForm;

begin

f OpenDialog.Execute then

begin

NewChild := CreateChild;

NewChild.OLEContainer.LoadFromFile(OpenDialog.FileName)

end

end;

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