信息化 频道

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

  4.3.9 ClientApi_FindEntityByDataHandle函数

声明(来自ClientProcs单元):

Function ClientApi_FindEntityByDataHandle(ADataHandle : TObjectHandle) : TObjectHandle;

描述:

ClientApi_FindEntityByDataHandle 函数使用一个编辑器窗体句柄来返回查找返回一个实体的句柄。此实体可为设计资源管理器编辑器窗体内的一个文档。您能通过使用ClientAPI_QueryEntity 或ClientAPI_QueryDocumentEntity 查询此实体来检查文档类型,名称等等。

例子:

EntityHandle :=

ClientAPI_FindEntityByDataHandle(MessageRouter_GetState_CurrentEditorWindow);

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

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

MessageRouter_Getstate_CurrentEditorWindow函数从Protel 99运行时间库中获取在设计资源管理器中当前编辑器窗体的句柄。ClientAPI_FindEntityByDataHandle函数返回此窗体中打开的文档的句柄。

参见其它:

ClientApi_FindBinderFromAnyDataHandle函数

ClientApi_GetDocumentOwnerBinder函数

ClientApi_FindChildDocumentInBinder函数

  4.3.10 ClientApi_GetCurrentUserID过程

声明(来自ClientProcs单元):

Procedure ClientApi_GetCurrentUserID(AEntityHandle : TObjectHandle; Var UserID : TString);

描述:

ClientApi_GetCurrentUserID过程使用实体参数句柄返回一个有效实体的用户ID号字符串。用户ID号字符串是在一个设计数据库中工作的用户成员(如系统管理员、普通访客或一个指定的项目组成员)。

  4.3.11 ClientApi_GetDocumentEntityAbsoluteAddress过程

声明(来自ClientProcs单元):

Procedure ClientApi_GetDocumentEntityAbsoluteAddress(AEntity : TObjectHandle; Var AbsoluteStorageName : TString);

描述:

ClientApi_GetDocumentEntityAbsoluteAddress在关联的设计数据文档内获得一个文档实体的绝对地址。

一个绝对地址包含如下表按次序所显示的标识符。

标识符

备注

D>

表示数据库存储类型,能为MSACCESS或MSSQL数据库格式。

$RP

表示一个设计数据库的根路径。

$RN

表示一个设计数据库的根文件名称。

$OP

表示关于一个设计数据库的实体的偏移路径。

$ON

表示一个实体的偏移名称。

$ID

表示用户ID号(只读)。

$ATTR

表示一个项目的属性。属性能表现为:Shortcut、NoChildItem 、ActiveDoc、OLEDoc、LinkedOLEDoc标记。

$E

表示编辑器种类。

$STF

表示到一个文件的快捷键(一个到外部文件的连接,举例来说如在设计数据库外部的文件)

例子:

Entityhandle :=

ClientAPI_FindEntityByDataHandle(MessageRouter_GetState_CurrentEditorWindow);

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

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

ClientAPI_GetDocumentEntityAbsoluteAddress(Entityhandle, ddBAddressString);

//ClientApi_GetDocumentEntityAbsoluteAddress在关联的设计数据文档内获得一个文档实体的绝对地址,并把绝对地址赋予字符串变量ddBAddressString。

ShowInfo(ddBAddressString);//显示绝对地址字符串。

一个典型的设计数据库地址字符串看起来这个样子:

D>MSACCCESS:$RP>D:\Program Files\Design Explorer 99 SE $RN>MyDesign.ddb$OP>Documents$ON>Control.pcb$ID>65$ATTR>0$E>PCB$STF>

这个“MyDesign.ddb”设计数据库放在硬盘或网络“D:\Program Files\Design Explorer 99 SE”目录下。“Control.pcb”PCB文档放在此设计数据库“MyDesign.ddb”中的一个“‘Documents”文件夹下。

注意,以下这段代码是给定一个DDB文件名,从DDB文件中得到一般文件对象的完整路径和文件名称(Fullname),即全路径名称

Function GetNormalFileNamefromDDBFileName(DDBFileName : TString) TString;

Var

Address : TDDBAddress;

Begin

Result := DDBFileName;

If DDB_IsDatabaseFileName(DDBFileName) Then

Begin

Address := TDDBAddress.Create(DDBFileName);

//根据DDB文件名称创建一个绝对地址对象。

Result := Address.Root.Path + ‘\’ + Address.OffSet.Name;

//从绝对地址中取出文件全路径名称。

Address.Free;//释放地址对象。

End;

End;

此代码片段从一个实体的绝对地址中提取出一般的文件名称(Fullname)。

  4.3.12 ClientApi_GetDocumentKindDetails过程

声明(来自ClientProcs单元):

Procedure ClientApi_GetDocumentKindDetails(DocumentKind : PChar; Var IconName,ServeDLLPath : PChar);

描述:

ClientApi_GetDocumentKindDetails过程返回相关联的图标名称和特定文档种类的服务器DLL路径。

例子1:

请参见\SAMPLES\NO6\API\Client\GetDocumentKindDetails代码。

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

Var

EntityHandle : TObjectHandle;

Entity : TDocumentEntity;

DocumentKind : PChar;

IconName: PChar;

ServeDLLPath : PChar;

DocumentName : TChar;//文档实体的编辑器种类即文档的类型字符串变量。

Begin

EntityHandle :=

ClientAPI_FindEntityByDataHandle(MessageRouter_GetState_CurrentEditorWindow);

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

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

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

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

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

StrPCopy(DocumentName,Entity.EditorKind);//把文档实体的编辑器种类即文档的类型字符串赋予文档名称变量DocumentName。

GetMem(IconName ,255);//申请内存。

GetMem(ServeDllPath,255);

ClientApi_GetDocumentKindDetails(Documentname,IconName,ServeDLLPath);

ShowInfo(StrPas(IconName) + ' ' + StrPas(ServeDllPath));//显示编辑器的图标名称和DLL文件的完整路径。

FreeMem(IconName ,255);

FreeMem(ServeDllPath,255);

Entity.Free;//释放实体。

End;

此代码片段示范ClientApi_GetDocumentKindDetails处理来返回当前图标的图标和服务器的完整路径。例如,如果您有设计资源管理器在X:\Program Files\Design Explorer 99目录下并且容器文件夹被激活,此代码将显示图标名称为“FOLDER”和服务器完整路径与名称“X:\Program Files \Design Explorer 99\System\Binder.DLL”。

0
相关文章