信息化 频道

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

Begin

Pad := TPCBPad.Create(PadHandle);//建立焊盘对象

Pad.QueryDatabase(PCBTypes.eGetState);//用内部服务器数据同步外部服务器数据

PadList.Add('Pad : '+ IntToStr(PadNumber));//焊盘N。

PadList.Add('TopXSize = ' + CoordUnitToString(Pad.TopXsize,BoardUnit));

//增加焊盘TopXsize参数。

PadList.Add('TopYsize = ' + CoordUnitToString(Pad.TopYsize,BoardUnit));

//增加焊盘TopYsize参数。

PadList.Add('MidXsize = ' + CoordUnitToString(Pad.MidXsize,BoardUnit));

//增加焊盘MidXsize参数。

PadList.Add('MidYsize = ' + CoordUnitToString(Pad.MidYsize,BoardUnit));

//增加焊盘MidYsize参数。

PadList.Add('BotXsize = ' + CoordUnitToString(Pad.BotXsize,BoardUnit));

//增加焊盘BotXsize参数。

PadList.Add('BotYsize = ' + CoordUnitToString(Pad.BotYsize,BoardUnit));

//增加焊盘BotYsize参数。

PadList.Add('HoleSize = ' + CoordUnitToString(Pad.HoleSize,BoardUnit));

//增加焊盘HoleSize参数。

PadList.Add('TopShape = ' + ShapeToString(Pad.TopShape));

//增加焊盘TopShape参数。

PadList.Add('MidShape = ' + ShapeToString(Pad.MidShape));

//增加焊盘MidShape参数。

PadList.Add('BotShape = ' + ShapeToString(Pad.BotShape));

//增加焊盘BotShape参数。

PadList.Add('Name = '+ Pad.Name);

//增加焊盘Name参数。

Case Pad.DaisyChainStyle of

eDaisyChainLoad : S := 'DAISYCHAINLOAD';

eDaisyChainTerminator : S := 'DAISYCHAINTERMINATOR';

eDaisyChainSource : S := 'DAISYCHAINSOURCE';

End;

PadList.Add('DaisyChainStyle = ' + S);

//增加DaisyChainStyle参数。

PadList.Add('Angle = '+ FloatToStr(Pad.Angle));

//增加焊盘Angle参数。

If Pad.Plated Then S := 'True' Else S := 'False';

PadList.Add('Plated = ' + S);

//增加焊盘Plated参数。

Pad.Free;

End;

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

// ExportToSpread过程完成把存放焊盘信息的APadList列表中内容输出到一工作图表中,并用Tab分隔。SpreadHandle为电子表格句柄,ARow为开始行,APadList为存放焊盘信息的列表。

Procedure ExportToSpread(SpreadHandle : TSPHandle; ARow : Integer; APadList : TStringList);

Const

cTab= #9;//换行

cEnter= #13;//回车

var

Buffer : PChar;

TempBuffer : PChar;

I: Integer;

Begin

If SpreadHandle <> 0 Then//当前有电子表。

Begin

GetMem(Buffer,1024); //申请1024字节内存。

GetMem(TempBuffer,1024); //申请1024字节内存。

StrPCopy(TempBuffer,'');//用空字符初始化内存。

StrPCopy(Buffer,''); //用空字符初始化内存。

For I := 0 to APadList.Count - 1 do //APadList为存放焊盘信息的列表。

Begin

StrPCopy(TempBuffer,APadList.Strings[i]);//把焊盘列表中信息放在内存中。

StrCat(Buffer,TempBuffer);//把TempBuffer中内存追加到Buffer中。

StrCat(Buffer,cTab);//把Buffer中内容加上换行符。

End;

StrCat(Buffer,cEnter);//焊盘列表中数据全部输出后,Buffer中追加回车符

SpreadAPI_InsertTabDelimitedText(SpreadHandle,ARow,1,Buffer);

//把SpreadHandle指向的工作图用TAB来确定界限的文本块分隔,从ARow行,1列开始。ARow参数是在当前印制板中第几个焊盘对象,即第一个焊盘对象从1行开始,第N个焊盘对象是N行开始。

FreeMem(TempBuffer,1024);//释放内存。

FreeMem(Buffer,1024); //释放内存。

End;

End;

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

//RefreshDesignDatabase过程刷新spread文档,使其每一列内容和宽度相适应。

Procedure RefreshDesignDatabase(SpreadHandle : TObjectHandle);

Var

Binderhandle : TObjecthandle;

Entityhandle : TObjecthandle;

P: PChar;

Begin

EntityHandle :=

ClientAPI_FindEntityByDataHandle(MessageRouter_GetState_CurrentEditorWindow);

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

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

If EntityHandle = 0 Then Exit;

BinderHandle := ClientAPI_GetDocumentOwnerBinder(EntityHandle);

//ClientApi_GetDocumentOwnerBinder函数获得在其内部存有文档的封装对象的句柄,一个封装对象表现为包含实体的容器,一个实体可为一个设计文档或文件来。

ClientAPI_RepopulateDocumentEntity(BinderHandle,False);

//刷新当前实体。

//Spread单元自动格式化auto formatting of Spread cells

GetMem(P,1024);//申请1024字节内存

StrPCopy(P,'');//用空字符初始化内存

SetState_Parameter(P,'C1','-1');

//SetState_Parameter过程插入一个参数到指定的参数文本块中。

{初始列 Initial column }

SetState_Parameter(P,'C2','0');

{ 最后的列Final column}

SetState_Parameter(P,'ColumnWidth','AUTO');//宽度为自动适应。

MessageRouter_SendCommandToModule('Spread:FormatColumn',P,1024,SpreadHandle);

//发送命令给Spread服务器的FormatColumn过程,命令参数为P中存放的参数,内存大小为1024,目标对象句柄为SpreadHandle。

FreeMem(P,1024);

EntityHandle := ClientAPI_FindEntityByDataHandle(SpreadAPI_GetCurrentSpreadHandle);

//SpreadAPI_GetCurrentSpreadHandle函数返回一个当前在设计资源管理器99中打开的spread文档的句柄。

End;

此代码清单被完全地包含在创建一个新的spread文档代码中。此代码基本功能是创建一个spread文档,这里有一个WaitForCommit函数,此函数执行等待功能直到其能得到新的spread文档的句柄为止,接着使用印制板句柄,迭代程序查找焊盘对象的属性,属性被放入到一个TStringlist列表对象中,再用SpreadAPI_InsertTabDelimitedText函数把整个字符串从列表对象中传递到spread文档中,迭代程序继续运行直到没有更多的焊盘对象被从印制板文档中查找到,更多有关迭代程序信息,请参见PCB API章节和PCB API参考章节相关内容,更多的有关创建和维护文档实体的信息,请参见客户端API。

0
相关文章