6. 其它源代码例子
6.1 说明
在此章节中,您将学习如何在设计资源管理器平台上来创建四个原理图编辑器的服务器,所有这些例子都将使用强大的原理图API,例子中按部就班地解释每一个服务器的功能,并说明如何使用原理图API函数,此章节的基础是知识是如何在设计资源管理器应用程序中有效地使用原理图API。
6.2 原理图库编辑器的全局设置例子
此例子显示如何来提取原理图库编辑器的全局设置。请见SDK例子\SAMPLES\NO3\API\Sch\Get Library Options。
{....................................................................................}
Procedure ObtainGlobalSettings;
Var
SchLibHandle : Tobjecthandle;
SchLibOptions: TschLibraryOptions;
ShowBorderString : String;
ShowHiddenPinsString : String;
UseCustomSizeString: String;
SnapGridOnString : String;
VisibleGridOnString: String;
Begin
If MessageRouter_GetState_WindowKind(SchAPI_GetCurrentEditorWindow) <> 'SchLib' Then Exit;
//以当前编辑器窗体类型句柄作为参数来取得窗体类型,即文档类型,如果不为“SchLib”退出。
SchLibHandle:= SchAPI_GetCurrentSheetHandle;//取得当前库图表句柄。
SchLibOptions := TSchLibraryOptions.Create(SchLibHandle);
//根据库图表句柄创建环境库选项。
SchLibOptions.Querydatabase(eGetState);//同内部数据库同步外部数据库。
If SchLibOptions <> Nil Then//原理图库选项建立成功。
With SchLibOptions Do
Begin
QueryDatabase(eGetState);
If Not(ShowBorder) ThenShowBorderString := 'ShowBorder=False'
Else ShowBorderString := 'ShowBorder=True';
//根据选项的属性“ShowBorder”属性值,对字符串变量ShowBorderString赋值。
If Not(ShowHiddenPins) Then ShowHiddenPinsString := 'ShowHiddenPin = False'
Else ShowHiddenPinsString := 'ShowHiddenPin = True';
//根据选项的属性“ShowHiddenPins”属性值,对字符串变量ShowHiddenPinsString赋值。
If Not(UseCustomSize)ThenUseCustomSizeString := 'UseCustomSize = False'
Else UseCustomSizeString := 'UseCustomSize = True';
//根据选项的属性“UseCustomSize”属性值,对字符串变量UseCustomSizeString赋值。
If Not(SnapGridOn) Then SnapGridOnString := 'SnapGridOn = False'
Else SnapGridOnString := 'SnapGridOn = True';
//根据选项的属性“SnapGridOn”属性值,对字符串变量SnapGridOnString赋值。
If Not(VisibleGridOn)Then VisibleGridOnString := 'VisibleGridOn = False'
Else VisibleGridOnString := 'VisibleGridOn = True';
//根据选项的属性“VisibleGridOn”属性值,对字符串变量VisibleGridOnString赋值。
ShowInfo(
'Style= ' + IntToStr(Ord(Style))+ #13 +
'Size= ' + IntToStr(Ord(Size))+ #13 +
'Orientation= ' + IntToStr(Ord(Orientation)) + #13 +
ShowBorderString+ #13 +
ShowHiddenPinsString+ #13 +
UseCustomSizeString+ #13 +
'CustomXSize= ' + IntToStr(CustomXSize)+ #13 +
'CustomYSize= ' + IntToStr(CustomYSize)+ #13 +
'BorderColor= ' + IntToStr(BorderColor)+ #13 +
'WorkspaceColor= ' + IntToStr(WorkspaceColor)+ #13 +
SnapGridOnString+ #13 +
'SnapGridSize= ' + IntToStr(SnapGridSize)+ #13 +
VisibleGridOnString+ #13 +
'VisibleGridSize= ' + IntToStr(VisibleGridSize)+ #13 +
'Description= ' + StrPas(Description));
End;
SchLibOptions.Free;//释放库选项对象。
End;
此段代码片段所使用了下列的重要的函数和过程。
|
MessageRouter_GetState_WindowKind |
SchAPI_GetCurrentSheetHandle |
|
SchAPI_GetCurrentEditorWindow |
Querydatabase |
这段代码做什么?
设计资源管理器的运行时间库提供的函数MessageRouter_GetState_WindowKind返回当前被使用的文档编辑器的类型,此函数的参数从SchAPI_GetCurrentEditorWindow函数获得,SchAPI_GetCurrentEditorWindow函数得到在设计资源管理器中的当前文档的窗体句柄,如果返回字符串是“SchLib”,原理图库图表句柄被从SchAPI_GetCurrentSheetHandle函数获取并且传递到TSchLibraryOptions.Create构造函数。
TSchLibraryOptions对象被创建,并且被检查是否是一个有效的对象。TSchLibraryOptions对象的字段被使用Delphi的ShowMessage对话框显示,请注意字段风格(Style)、大小(Size)和方向(Orientation)-它们的次序值被获得的它们的枚举类型替代。
This code example must have the following units in the Uses clause: The Windows, SysUtils, SchAPITypes, SchProcs and SchClass, Rt_Util, Rt_Types, Rt_Param, and Rt_Forms units.
此代码例子必须在User子句中加入下列单元,Windows、SysUtils、SchAPITypes、SchProcs 、SchClass、Rt_Util、Rt_Types、Rt_Param和Rt_Forms单元。
6.3 多层对象描述例子
下面的代码例子检查在原理图编辑器中的当前图表是否是一个项目元件,并且接着收集此项目中的所有图表信息,然而,如果图表是单独的文档,服务器仍将收集有关此图表的信息。一个项目中的图表或单独的图表的信息被输出到设计资源管理器的文本文档。
项目统计,请见SDK例子\SAMPLES\NO3\API\Sch\Project Count。
{....................................................................................}
//以下这段代码是根据当前原理图文档来取得其容器对象,代码主要是用在对象发生改变后,刷新容器对象。
Procedure Repopulate;
Var
EntityHandle: ClientTypes.TObjectHandle;
BinderHandle: ClientTypes.TObjectHandle;
Begin
EntityHandle :=ClientAPI_FindEntityByDataHandle(MessageRouter_GetState_CurrentEditorWindow);
//MessageRouter_GetState_CurrentEditorWindow函数返回在项层的文档的窗体句柄。
//ClientApi_FindEntityByDataHandle 函数使用一个编辑器窗体句柄来返回查找返回一个实体的句柄。此实体能表现为设计资源管理器编辑器窗体内的一个文档。您能通过使用ClientAPI_QueryEntity 或ClientAPI_QueryDocumentEntity 查询此实体来检查文档类型,名称等等。