信息化 频道

<连载>Protel二次开发从入门到精通

  4.3.30 SetAllClientApiProcedures过程

声明(来自ClientProcs单元):

Procedure SetAllClientApiProcedures;

描述:

SetAllClientApiProcedures过程初始化并且设置所有客户端API调用。

  5. 类
  5.1 TEntity类

声明(来自ClientClass单元):

Type

TEntity = Class

Handle: TObjectHandle;

ParentHandle: TObjectHandle;

EntityId: TEntityId;

OwnerDesign: TObjectHandle;

Kind: TString;

Name: TString;

ObjectHandle: TObjectHandle;

Constructor Create(AHandle : TObjectHandle);

DestructorDestroy;

ProcedureQueryDatabase(AQueryMode : TQueryMode); Virtual;

ProcedureWriteToDebug;

End;

描述:

TEntity类代表一个设计数据库基本的实体。对于提供有关在一个设计数据库中的文档的信息的TDocumentEntity类而言,此类是基础类。

字段

类型

描述

Handle

TObjectHandle

表示一个实体的句柄。

ParentHandle

TObjectHandle

表示此实体的上一层实体的句柄。常用于在当您需要得到一个实体所属的文件夹句柄情况下。

EntityId

TEntityId

表示实体的ID号,当TEntityId变量是一个eDocument类型,即文档对象,则一个TDocumentEntity对象被创建,当TEntityId变量是一个eNoEntity或eItem,即非文档对象,则一个TEntity对象被创建。

OwnerDesign

TObjectHandle

表示一个binder的句柄(包含实体的容器)。

Kind

TString

没有使用

Name

TString

表示实体名称。

ObjectHandle

TObjectHandle

表示实体的窗体句柄,等效于在Delphi运行时间库Windows.pas中定义的HWND参数。

方法

描述

Constructor Create(AHandle : TObjectHandle);

创建一个实体对象。

Destructor Destroy

销毁一个实体对象。

Procedure QueryDatabase

表示查询模式,要么是得到一个实体的值或设置一个实体的值(eGetstate,eSetState)。

Procedure WriteToDebug

为调试目的输出一个实体对象的数据到控制台窗体。

注意:

Querydatabase过程确保在您的服务器中的TEntity对象和设计资源管理器客户端服务器中的数据之间的数据完整性得到了保护。因而,如果您想要的数据已被您的服务器修改,您需要用eSetState模式来通知客户端服务器,或如果您想要从客户端中提取数据,您需要用eGetState模式来通知客户端服务器。

参见其它:

TObjectHandle类型

ClientAPI_QueryEntity

ClientAPI_QueryDocumentEntity函数

  5.2 TDocumentEntity类

声明(来自ClientClass单元):

TDocumentEntity = Class(TEntity)

EditorKind : TString;

DocumentDBId : Integer;

DBAttributes : Integer;

FullAddress: TString;

Constructor Create(AHandle : TObjectHandle);

ProcedureQueryDatabase(AQueryMode : TQueryMode); Override;

FunctionGetAbsoluteAddress : TString;

End;

描述:

TDocumentEntity类代表一个设计数据库的文档实体。一个文档实体代表设计数据库中一个文档或一个文件夹。此类从TEntity基础类继承。

字段

类型

描述

EditorKind

TString

表示编辑器类型。

DocumentDBId

Integer

表示一个文档实体的唯一的ID号。

DBAttributes

Integer

表示此文档的属性。DBAttributes实际上是一个字节字段,请与这五个字节掩码常数(cfaShortcut、cfaNoChildItem、cfaActiveDoc、 cfaOLEDoc、cfaLinkedOLEDoc) 来比较。更多信息请参见protel 99运行时间库中ddb_address。

FullAddress

TString

表示文档实体的完整的地址,为只读值。

方法

描述

Constructor Create(AHandle : TObjectHandle);

创建一个文档实体对象。

Procedure QueryDatabase

表示查询模式,要么是得到一个实体的值或设置一个实体的值(eGetstate,eSetState)。

Function GetAbsoluteAddress : TString;

提取此文档实体的抽象地址。

请见SDK例子\SAMPLES\NO6\API\Client\Document Entity Details。

{....................................................................................}

Procedure GetDocumentEntityInfo;

Var

EntityHandle: TObjectHandle;//实体对象句柄。

BinderHandle: TObjectHandle;//容器对象句柄。

DocumentEntity: TDocumentEntity;//文档对象句柄。

Begin

EntityHandle :=

ClientAPI_FindEntityByDataHandle(MessageRouter_GetState_CurrentEditorWindow);

//MessageRouter_GetState_CurrentEditorWindow函数返回当前在项层的文档的窗体句柄。当前在项层在文档的窗体句柄。

//ClientApi_FindEntityByDataHandle函数使用一个编辑器窗体句柄来返回查找返回一个实体的句柄。

If Entityhandle = 0 Then Exit; //如果无实体对象则退出。

DocumentEntity := TDocumentEntity.Create(EntityHandle);//创建一个文档实体对象。

DocumentEntity.QueryDatabase(eGetState);//用客户端数据同步外部外部服务器数据。

ShowInfo('Object handle = '+ IntToStr(DocumentEntity.ObjectHandle)+ #13 +

'Parent handle = '+ IntToStr(DocumentEntity.ParentHandle)+ #13 +

'Binder handle = '+ IntToStr(DocumentEntity.OwnerDesign)+ #13 +

'AEntityId = '+ IntToStr(Ord(DocumentEntity.EntityId)) + #13 +

'Editor Kind = '+ DocumentEntity.EditorKind+ #13 +

'Document DB Id = ' + IntToStr(DocumentEntity.DocumentDBId)+ #13 +

'Full address = '+ DocumentEntity.FullAddress

);

DocumentEntity.Free;//释放文档实体对象。

End;

TDocumentEntity类封装ClientAPI_QueryDocumentEntity函数来提取有关一个特定的文档实体明细。

参见其它:

TObjectHandle类型

ClientApi_GetDocumentEntityAbsoluteAddress函数

ClientAPI_QueryEntity函数

ClientAPI_QueryDocumentEntity函数

TEntity类

  6. 客户端API例子
  6.1打开想要的文档

如何您想要打开一个指定的文档,且您仅仅知道设计文档的名称,那么您能运行此小规模的附加的服务器,在“\SAMPLES\NO2\API\Client\SearchAndOpenDocuments”文件夹下。当您读完客户端API章节后,您就能了解此服务器是如何工作的。

为了使用这个“SearchAndOpen”附加的服务,您只需输入参数“DocumentName1=Value1 | DocumentName2 = Value2”等,在这里,ValueX是设计文档的文件名称(例如,“DocumentName1 =Control.pcb | DocumentName2 = logic.sch”)。(e-works)

0
相关文章