Altium Designer V23中DelphiScript报expecting ;错误的解决求助
DelphiScript在Altium Designer V23中'expecting ;'错误排查与解决
错误原因
你怀疑的语句本身语法无问题,但Altium的DelphiScript对枚举类型的引用有特殊要求:eTrackObject、eNoDimension、eRouting这类枚举值必须加上所属命名空间前缀,否则脚本解析器会将其识别为未定义变量,引发解析混乱,最终触发'expecting ;'的错误提示。另外,直接调用LayerStackup也属于未定义错误,同样会干扰语法解析。
修正后的完整代码
procedure CrearPistaDeCobre; var PCBBoard: IPCB_Board; Track: IPCB_Track; StartPoint, EndPoint: TCoordPoint; begin // Obtener la placa activa PCBBoard := PCBServer.GetCurrentPCBBoard; if PCBBoard = nil then begin ShowMessage('No hay una placa activa.'); Exit; end; // Crear un objeto de pista - 添加枚举类型前缀 Track := PCBBoard.AddPCBObject(TPrimitiveType.eTrackObject, TDimensionStyle.eNoDimension) as IPCB_Track; // Verificar que el objeto creado sea de tipo IPCB_Track if Track <> nil then begin // Establecer los puntos de inicio y fin de la pista StartPoint := PCBServer.PCBPointFactory.CreatePoint(0, 0); EndPoint := PCBServer.PCBPointFactory.CreatePoint(MilsToCoord(10000), MilsToCoord(0)); // Convertir mils a coordenadas // Establecer las propiedades de la pista - 修正枚举引用与层栈访问 Track.SetState_Object(TObjectState.eRouting); Track.SetWidthInCoord(MilsToCoord(2000)); // Ancho de la pista en mils Track.SetLayer(PCBBoard.LayerStackup.LayerByIndex(3)); // 通过PCBBoard实例访问层栈 Track.SetStartPoint(StartPoint); Track.SetEndPoint(EndPoint); // Actualizar la placa PCBBoard.GraphicallyInvalidate; ShowMessage('Pista de cobre creada exitosamente.'); end; else begin ShowMessage('Error al crear la pista de cobre o el objeto no es de tipo IPCB_Track.'); end; end; // Llamar a la función principal CrearPistaDeCobre;
核心修正项
- 枚举值添加所属类型前缀:
eTrackObject→TPrimitiveType.eTrackObjecteNoDimension→TDimensionStyle.eNoDimensioneRouting→TObjectState.eRouting
- 层栈访问修正:
LayerStackup.LayerByIndex(3)改为PCBBoard.LayerStackup.LayerByIndex(3),必须通过当前PCB板实例访问层栈对象
内容的提问来源于stack exchange,提问作者Aaron G
相关产品推荐
相关产品推荐

