首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi OLE 容器核心:對象初始化、凍結激活、插入對象對話框、本地激活菜單融合

     編輯:Delphi

8.3.2 插入 OLE 對象

8.3.2.1 InsertOLEObjectDlg 函數

function InsertOleObjectDlg(Form: TForm; HelpContext: THelpContext;
  var PInitInfo: Pointer): Boolean;
  • Form:擁有對話框窗體(含 OLE 容器)
  • HelpContext:在線幫助,0 為無
  • PInitInfo:無類型指針,指向內部數據結構。函數修改指向有效結構(含被選對象初始化信息)。使用後必須調用 ReleaseOLEInitInfo 釋放內存。
  • 用戶點確定返回 True,PInitInfo 指向初始化信息

8.3.2.2 初始化 OLE 容器組件

調用 InsertOLEObjectDlg 獲得 PInitInfo 後賦給容器 PInitInfo 屬性,ObjClass/ObjDoc/ObjItem 自動定義。初始化完成對象被激活,服務端獲取控制權。凍結對象後容器顯示圖像/位圖代表對象。AutoActivate 屬性可重新激活,默認雙擊激活。

procedure TOLEObjectForm.InitializeOLEObject(Info: Pointer);
begin
  OLEContainer.PInitInfo := Info;
  ReleaseOLEInitInfo(Info);
end;

procedure TOLEObjectForm.InsertObject1Click(Sender: TObject);
var Info: Pointer;
begin
  if InsertOLEObjectDlg(OLEFrameForm, 0, Info) then
    InitializeOLEObject(Info);
end;

8.3.3 凍結 OLE 對象

  • OLE 1.0 服務端:對象在服務端窗體激活,選「文件|退出」凍結
  • OLE 2.0 本地激活:菜單融合、工具條/狀態條切換,點擊容器外任意處凍結
  • 代碼凍結:設置 OLEContainer.Active := False
procedure TOLEObjectForm.Deactivate1Click(Sender: TObject);
begin
  OLEContainer.Active := False;
end;

8.3.1 OLE 應用程序界面開發

採用 MDI:父窗體含菜單、工具條、狀態條;子窗體含 OLE 容器。

8.3.1.1 菜單融合與 GroupIndex

支持本地激活的 OLE 2.0 對象需菜單融合。GroupIndex 決定融合位置。OLE 服務端融合三組菜單:Edit、View、Help,各有唯一組索引。應用程序索引為 1、3、5 的菜單組在激活時被服務端同索引菜單替換。例程中編輯菜單被服務端 Edit 替換。保留應用程序菜單需分配非 1/3/5 索引。

菜單索引功能激活時來源
文件0文件/退出OLE 應用程序
Edit1編輯 OLE 對象OLE 服務端
對象2操作未激活對象OLE 應用程序
View3修改觀測方式OLE 服務端
窗體4操控窗體OLE 應用程序
Help5訪問服務端幫助OLE 服務端

8.3.1.2 工具條/狀態條協調

本地激活時服務端嘗試替換應用程序工具條/狀態條。應用程序需編寫代碼讓服務端使用。通過面板 Align 屬性創建工具條/狀態條。Align=alTop/Left/Bottom/Right 時未鎖定,服務端可替換;設置 Locked=True 防止被替換。激活時觸發 OnStatusLineEvent,Msg 參數接收服務端文本:

procedure TOLEObjectForm.OleContainerStatusLineEvent(Sender: TObject; Msg: String);
begin
  OLEFrameForm.StatusBarPanel.Caption := Msg;
end;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved