If Iterator <> Nil Then //如果迭代程序对象建立成功。
Begin
Partslist := TStringList.Create;//创建存放元件属性的列表。
PartHandle := SchAPI_GetFirstObject(Iterator);
//SchAPI_GetFirstObject函数使用给定的迭代程序句柄返回第一个查找到的原理图对象。
While PartHandle <> Nil Do
Begin
SchPart := TSchPart.Create(Nil);
//创建一个原理图元件对象。
SchPart.ObjectHandle := PartHandle;
//把查找到的元件对象的句柄赋予新建的原理图对象。
SchPart.Querydatabase(eGetState);
//用内部数据库服务器同步外部数据库服务器。
ComponentHandle := SchAPI_GetLibraryComponentHandle(
SchPart.LibReference,kShortStringLength);
// SchAPI_GetLibraryComponentHandle函数用给定的库引用字符串和字符串的长度参数返回一个库组件的句柄,即元件所引用的元件库的句柄。
Partslist.Add(StrPas(SchPart.LibReference) + ' Designator = '
+ GetStringFromTextObject(SchPart.PartDesignator));
//把元件库的引用库名称(SchPart.LibReference)和设计流水号信息(SchPart.PartDesignator)加到元件信息列表Partslist中。
SchPart.Free;
PartHandle := SchApi_GetNextObject(Iterator);
//SchAPI_GetNextObject函数使用给定的迭代程序句柄返回下一个发现的对象。此函数被用于连接SchAPI_GetFirstObject函数。
Partslist.Add('');
//一个元件之间加一个空行。
End;
SchAPI_DestroyIterator(Iterator);
//在当前原理图全部查找完成后销毁迭代程序对象。
Partslist.Add('Report created on '+ DateToStr(Date) + ' ' + TimeToStr(Time));
//输出报表产生时间
End;
//原理图实体的绝对的地址的扩展名称被修改…
CurrentSheetEntity := ClientApi_FindEntityByDataHandle(
SchAPI_GetCurrentEditorWindow);
//ClientApi_FindEntityByDataHandle 函数使用一个编辑器窗体句柄来返回查找返回一个实体的句柄。此实体能表现为设计资源管理器编辑器窗体内的一个文档。您能通过使用ClientAPI_QueryEntity 或ClientAPI_QueryDocumentEntity 查询此实体来检查文档类型,名称等等。
ClientApi_GetDocumentEntityAbsoluteAddress(CurrentSheetEntity,S);
//在关联的设计数据文档内获得一个文档实体的绝对地址。
S := ForceFileNameExtension(S, 'TXT');
//用新的扩展名称替代已存在的文件扩展名称。
AssignDDB(F,S,'Admin');//产生并且放入文件到DDB中。AssignDDB过程联合F到一个设计数据库的实体直到F被关闭为止。
Rewrite(F);
Writeln(F,'Schematic Parts Report...');
Writeln(F,'=========================');
Writeln(F,'');
Writeln(F,'');
For I := 0 To PartsList.Count - 1 Do
Writeln(F,PartsList.Strings[I]);
Writeln(F,'');
CloseFile(F);
Repopulate;//刷新对象。
Partslist.Free;
End;
更多的关于AssignDDB函数调用参考明细和客户端API和RTL参考,请参见相关迭代程序章节内容。
7.3 文件查找
您可以仔细读一读FileFind例子,FileFind工程在“\SAMPLES\NO3\Servers\FileFind”目录下,此FileFind非常类似一个查找对话框,可在任何在设计资源管理器中打开的设计数据库中查找设计文档,“FileFind”服务器也是通过服务器制作向导产生的。
7.4 作用域不兼容性
如果您使用了客户端API和原理图API,编译器有时或许会抱怨有不兼容的类型。例如,当您试图在您的源代码中使用客户端API函数“DocumentEntity.QueryDataBase(eGetState)”,您尝试进行编译,编译器提示说‘Incompatible types(不兼容的类型).’。
解决方法是使用“DocumentEntity.QueryDataBase(ClientTypes.eGetState);”这样,编译器就知道如何来解决类型问题。(e-works)