信息化 频道

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

  4.3 文档处理函数
  4.3.1 ClientAPI_CreateDocumentLoader函数

声明(来自ClientProcs单元):

Function ClientAPI_CreateDocumentLoader : TObjectHandle;

描述:

ClientAPI_CreateDocumentLoader函数在设计资源管理器内创建一个内部的列表,将通过过程ClientAPI_LoadDocument来管理文档的加载。当您使用完文档时,您必须调用过程ClientApi_DestroyDocumentLoader或ClientApi_DestroyDocumentLoaderEx来销毁此内部列表。

参见其它:

ClientAPI_LoadDocument

ClientApi_DestroyDocumentLoader

ClientApi_DestroyDocumentLoaderEx

  4.3.2 ClientApi_DestroyDocumentLoader过程

声明(来自ClientProcs单元):

Procedure ClientApi_DestroyDocumentLoader(DocumentLoader : TObjectHandle);

描述:

ClientAPI_DestroyDocumentLoader过程销毁一个通过ClientAPI_CreateDocumentLoader过程创建的内部列表。

参见其它:

ClientAPI_CreateDocument过程

ClientApi_LoadDocument过程

ClientApi_DestroyDocumentLoaderEx过程

  4.3.3 ClientApi_DestroyDocumentLoaderEx过程

声明(来自ClientProcs单元):

Procedure ClientApi_DestroyDocumentLoaderEx(DocumentLoader : TObjectHandle; Parameters : PChar);

描述:

ClientAPI_DestroyDocumentLoaderEx过程控制文档的工作情况,Parameter参数是以一个空(Null)终止字符串为结尾,此参数由一个名称和一个值组成,名称组成是“Action =”,其值有两个可能,View或Save来分别控制文档是查看还是保存。

例子:

...

GetMem(P,256);//申请一个内存。

SetState_Parameter(P,’Action’,’Save’);//动作为保存。

ClientAPI_DestroyDocumentLoaderEx(Loaderhandle,P);

FreeMem(P,256);//释放内存。

此代码片段在文档加载对象被销毁前保存文档,参数是一个空字符串结尾的字符串,因而,您需要从如“Action = View”或“Action = Save”来传递一个字符串,使用完参数后,需要释放为参数需分配的内存。

参见其它:

ClientAPI_CreateDocument过程

ClientApi_LoadDocument过程

ClientApi_DestroyDocumentLoader过程

  4.3.4 ClientApi_FindChildDocumentInBinder函数

声明(来自ClientProcs单元):

Function ClientApi_FindChildDocumentInBinder(ADocumentEntity : TObjectHandle; DocName : TString): TObjectHandle;

描述:

ClientApi_FindChildDocumentInBinder过程返回一个名称为Docname参数的文档,ADocumentEntity是包含容器的句柄,此函数作用是在ADocumentEntity句柄所表示的实体中查找名称为Docname的文档。

参见其它:

ClientApi_GetDocumentOwnerBinder函数

ClientApi_FindBinderFromAnyDataHandle函数

  4.3.5 ClientApi_FindDocumentByNameInSameFolder函数

声明(来自ClientProcs单元):

Function ClientApi_FindDocumentByNameInSameFolder(ADocumentEntity : TObjectHandle; DocName : TString): TObjectHandle;

描述:

ClientApi_FindDocumentByNameInSameFolder函数返回参考文件所在的相同文件夹中的文档实体的句柄,举个实际的例子,如果您知道一个文档存在于一个特定的文件夹中,且您需要在参考文件所在的相同文件夹内的其它文档的句柄,您需要调用此函数。

两个参数分别表示参考文档的句柄和想要查找的某个文档的名称。

例子:

Var

EntityHandle : TObjectHandle;//参照实体的句柄。

NewHandle: TOBjectHandle;//想要知道某文档的文档句柄。

Entity: TDocumentEntity;//临时文档实体对象。

Name: TString;//想要知道某文档句柄的文档名称。

Begin

EntityHandle :=

ClientAPI_FindEntityByDataHandle(MessageRouter_GetState_CurrentEditorWindow);

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

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

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

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

Entity.Querydatabase(eGetState);//用内部服务器数据同步外部服务器数据。

ClientApi_FindDocumentByNameInSameFolder(Entityhandle,Entity.Name);//得到当前实体的文档句柄。

NewHandle := ClientApi_FindDocumentByNameInSameFolder(Entityhandle,'Documents.rep');

//得到文档“Documents.rep”的实体句柄。

ShowInfo(Entity.Name + ' 有 ' + '实体句柄= ' + IntToStr(entityhandle) + '新文档句柄= '+IntTostr(newhandle));

Entity.Free;//释放实体。

End;

如果您有一个叫作“documents.rep”名称的文本文档在设计数据库中,此代码被在实体上激活后,您将得到两个不同的句柄,Entityhandle是当前在设计数据库中激活的实体,newhandle变量是“documents.rep”文档的句柄,现在,如果您在当前激活文档“documents.rep”上运行此代码,那么实体文件和新文档句柄值是相同的,在您已有一个文档的名称和参考文档的实体的句柄情况下,想要知道此文档实体的句柄时特别有用。

  4.3.6 ClientApi_FindDocumentInstanceAlreadyOpen函数

声明(来自ClientProcs单元):

Function ClientApi_FindDocumentInstanceAlreadyOpen(ADocumentEntity : TObjectHandle) : TObjectHandle;

描述:

ClientApi_FindDocumentInstanceAlreadyOpen函数查找已经在设计资源管理器中打开的设计文档,此函数检查文档窗体现在是否打开。此函数常在如果您有一个快捷键指向一个特定的文档,且您想要检查快捷键指向的文档是否已打开的情况下使用。然而,它能被使用在来检查一个特定的文档是否已被打开在一个窗体中,如果句柄返回值是零,意味着文档没有被打开。

  4.3.7 ClientApi_FindBinderFromAnyDataHandle函数

声明(来自ClientProcs单元):

Function ClientApi_FindBinderFromAnyDataHandle(ADataHandle : TObjectHandle) : TObjectHandle;

描述:

ClientApi_FindBinderFromAnyDataHandle函数使用一个数据句柄(可能是一个设计文档窗体或文档本身等等)来返回容器(binder)的句柄。

例子:

BinderHandle := ClientApi_FindBinderFromAnyDataHandle(DocumentWindowHandle);

ClientApi_RepopulateDocumentEntity(BinderHandle, False);

ClientApi_FindBinderFromAnyDataHandle函数从一个在设计资源管理器中的文档窗体句柄得到其容器的句柄,然后把容器的句柄传递到ClientApi_RepopulateDocumentEntity函数来刷新容器(binder)内容。

  4.3.8 ClientApi_FindEntityByStorageName函数

声明(来自ClientProcs单元):

Function ClientApi_FindEntityByStorageName(AAddress: TString; AFilter : SetOfEntityId) : TObjectHandle;

描述:

ClientApi_FindEntityByStorageName函数使用一个实体的抽象地址和实体种类参数返回一个实体的句柄。

例子:

AbsAddress := DocumentEntity.GetAbsoluteAddress;//得到文档抽象地址。

...

EntityHandle := ClientApi_FindEntityByStorageName(AbsAddress, [eDocument]);

//根据抽象地址和文档种类查找实体。

If EntityHandle <> 0 Then //有实体

Begin

ClientApi_OpenDocumentEntity(EntityHandle, False);//打开实体。

ClientApi_SetAsCurrentDocument(EntityHandle);//设置为当前文档。

End;

这代码片段检索一个文档实体的句柄并且打开它,设置它是设计资源管理器中当前激活文档。

 

0
相关文章