8.4 宏

1.PADS Logic宏记录器总揽

宏是对所有命令、按键动作及鼠标单击操作记录下来用于重放的一个单一动作。可以实际地记录PADS Logic中的每一个步骤以用于重复。宏创建的存储的文件成为宏文件(Macro Files)。

PADS Logic的宏记录器是胜过屏幕显示的基于设计数据库栅格记录器。在【Tools】菜单中选择【Macros】命令即可开始执行宏命令,并弹出【Macro】对话框,该对话框提供了所有的宏命令函数。同时,在发生故障和文件失败时,宏命令还允许记录整个PADS Logic绘制到一个log文件中。

2.设置宏

可以设置创建、打开、编辑宏文件,创建、删除和允许宏,通过【Macro】对话框为宏指派快捷键。

3.宏语言

PADS Logic中的宏语言类似标准的Visual Basic Script(VB Script)语言。能支持绝大多数VB Script的功能,主要包括以下功能。

变量和变量排列

全套的标准算术和布尔表达式

语句

操作

对象、属性、方法

内部自动支持和自动对象扩展

支部宏对象

1)变量PADS Logic的宏语言所支持的变量即可为空,也可为数值型、逻辑型、字符串及对象。表8-5列出了系统所支持的变量之间互相转换的规则说明。

表8-5 变量间转换操作说明

数值型变量:该类型的变量的取值呈现为浮点数值(需要注意的是,数值和字符串的输入是可以互换的,它们之间可以自动转换到另一种类型)

逻辑型变量:该类型的变量取值为真(True)或假(False)

字符串变量:该类型的变量取值呈现为文本字符串(需要注意的是,数值和字符串的输入是可以互换的,它们之间可以自动转换到另一种类型)

双精度型变量:该类型变量呈现为数值(需要注意的是,双精度型变量和字符串的输入是可以互换的,它们之间可以自动转换到另一种类型)。对象呈现为通过由方法和属性组成的界面句柄的联合实体。对象与数值型和字符串类型是不同的。对象可以是宏对象和自动对象两种类型

自动对象是指可使用宏语言词汇表中的内置对象且可具有或不具有自动界面

自动对象是指自动使用的内置或扩展的对象

2)表达式 系统提供的宏语言可使用以下所列的任意一种表达式。

数值型表达式:指任何可以求出数值的表达式。数值型表达式可包括关键字、变量、常量及运算符

字符串表达式:指临近的连续字符组成的任意表达式,可包括字符串或字符串变量

3)运算符 系统中支持的运算符见表8-6。

表8-6 PADS Logic支持的运算符说明

(1)&运算。&运算语法格式为:

      result=expression1 & expression2

其中:result可为任何变量;expression1为任意表达式,当表达式不为字符串时,则将转换为字符串型;expression2为任意表达式,当表达式不为字符串型时,则将转换为字符串型。

示例:S=“abc” &“123”

(2)*运算。*运算语法格式为:

      result=number1 * number2

其中:result可为任意数值变量;number1为任意表达式,若该达不为数值型,则将转换为数值;number2为任意表达式,若该表达式不为数值型,则将转换为数值。

示例:x=y*z

(3)+运算。+运算的语法结构为:

      result=expression1 + expression2

其中:result可为任意数值变量;expression1为任意表达式;expression2为任意表达式。在使用&运算且不能确定是否是加法或字符串连接时需注意,使用&运算可代替强制字符串连接,这样做可以消除歧义并提供自文档代码。

当两个加法求和运算的表达式都为数值时,即执行数值加法;若两个表达式都为字符串时,即执行字符串连接;若两表达式其中一个为数值另一个为字符串,即执行加法运算。

示例:x=y+z

(4)/运算。/运算的语法结构为:

      result=number1 / number2

其中:result为任意数值变量;number1为任意表达式,若表达式值不是数值时,则将转换为数值;number2为任意表达式,若表达式值不是数值时,则将转换为数值。

示例:x=y/z

(5)-运算。-运算的语法结构为:

variable=number1-number2(该语法结构中的-为数学的减运算,用于找出两值的差值)

或为

-number(该语法结构中的-为表达式的负数值)

其中:result任意数值变量;number1为任意表达式,若该表达式不是数值型的,则将转换为数值;number2为任意表达式,若该表达式不是数值型的,则将转换为数值。

示例1:x=y-z

示例2:-x

(6)=运算。=运算的语法结构为:

      variable=value

其中:variable仅为变量或可写入权限;value为任意表达式、字符串表达式或常量。

示例:a=1

(7)^运算。^运算的语法结构为:

      result=number^exponent

其中:result为任意数值变量;number为任意表达式;exponent为任意数值表达式,若指数为整数时,number可为负数。

在单个表达式中,若执行的指数不止一个,则^运算以从左至右的顺序执行。

示例:x=y^z

(8)and运算。and运算的语法结构为:

      result=expression1 and expression2

其中:result为任意数值变量;expression1为任意表达式,若表达式不是逻辑型,则将转换为逻辑值;expression2为任意表达式,若表达式不是逻辑型,则将转换为逻辑值。

表8-7列出了and操作的真值表。

表8-7 and运算真值表

示例:a=b and c

(9)comparison运算。comparison运算的语法结构为:

      result=expression1 comparisonoperator expression2

其中:result为任意变量;expression1为任意表达式;repression2为任意表达式;comparisonoperator可为任意比较运算,如表8-8所列。

表8-8 comparison运算及其结果

(10)Mod运算。Mod运算的语法结构为:

      result=number1 Mod number2

其中:result为任意数值变量;number1为任意数值表达式;number2为任意数值表达式。

示例:x=y mod z

(11)Not运算。Not运算的语法结构为:

      result=Not expression

其中:result为任意数值变量;expression为任意表达式,若表达不是逻辑型,则将转换为逻辑值。

表8-9列出了Not运算的真值表。

表8-9 Not运算真值表

(12)Or运算。Or运算的语法结构为:

      result=expression1 Or expression2

其中:result为任意数值变量;expression1为任意表达式,若表达式不是逻辑型,则将自动转换为逻辑值;expression2为任意表达式,若表达式不是逻辑型,则将自动转换为逻辑值。

表8-10列出了Or运算的真值表。

表8-10 Or运算真值表

示例:x=y or z

(13)Xor运算。Xor运算的语法结构为:

      [result=]expression1 Xor expression2

其中:result为任意数值变量;expression1为任意表达式,若表达式不是逻辑型,则将转换为逻辑值;expression2为任意表达式,若表达式不是逻辑型,则将转换为逻辑值。

表8-11列出了Xor运算真值表。

表8-11 Xor运算真值表

4)语句PADS Logic支持宏语言中的VBScript语言语句如下所述。

Call

Close

Dim

Do...Loop

For-Next

Function

If...Then...Else statement

Input#

Open

Print#

ReDim

Set

Sub

While...Wend

Width#

(1)Call语句。Call语句用于传输控制到子程序或函数程序,其语法结构为:

      [Call] name [argumentlist]

当指定Call关键字来调用程序是,必须注意括号的完整使用。

其中:Call为关键字,在调用程序时,不一定必须使用Call关键字。若省略Call关键字,则必须省略对应的括号。若使用Call语法来调用任意内部函数或定义的函数,则该函数返回值会丢弃。

name为调用程序的名称。

argumentlist为用于通过程序的变量、排列或表达式的界定符。

示例:Call Myproc(0)

(2)Close语句。当关闭输出或附加的文件时,输出的最终缓存内容会写入到操作系统的缓冲区,所有的缓存空间和相关联的关闭文件都相关,并且相关联的文件带有文件的编号结尾。

Close语句的语法结构为:

      Close [filenumberlist]

其中:filenumberlist可是使用[[#]filenumber][,[#]filenumber]...语法结构的一个或多个文件编号,其中的filenumber是任意的有效文件编号。若忽略使用filenumberlist,所有通过Open语句打开的活动文件将关闭。

示例:close #1

(3)Dim语句。Dim语句用于语句变量以及分配存储空间,其语法结构为:

      Dim varname[{[subscrits]}] [,varname[([subscrits])]...

其中:varname是标准变量命名规定的变量名称;subscripts为排列变量的尺寸,subscrips的语法结构为[lower To] upper[,[lower To]upper]...,当不规定不清楚时,Lower bound为0。还可在带有空的括号情况下使用Dim语句,以语句一个动态排列。在此之后,使用Redim语句来定义在排列中的尺寸及要素。

示例:Dim x(10), y(20)

(4)Do...Lop语句。在条件为真或直到条件变为真是重复语句的块,其语法结构如下:

      Do [{While | Until}] condition]
      [statements]
      [Exit Do]
      [statements]
      Loop

      Do
      [statements]
      [Exit Do]
      [statements]
      Loop [{While | Until} condition]

其中:condition为一个或多个表达式(用于计算真或假的数值表达式,以及用于计算真或假的字符串表达式),当condition为空时,则condition视为假;statements是当condition为真或直到condition为真时的一个或多个语句。

可放置任何数量的Exit Do语句在Do…Loop语句中,作为另一种退出Do Loop语句的方法。Exit Do通常使用于一些条件之后。当使用Do Loop嵌套语句时,Exit Do传输控制到Loop,也就是Exit Do发生在Loop以上的的一层嵌套。

示例:

      Do while i<10
      i=i+1
      loop

(5)For-Next语句。For-Next语句用于重复语句组指定的时间数,其语法格式为:

      For counter=start To end(Step step)
      [Exit For]
      [statements]
      Next [counter]

其中:counter是作为循环计数器的数值变量,计数器不能为布尔元素或排列元素;start为计数器初始值;end为计数器终止值;step为计数器每次控制通过循环的数,若没有指定该值,则默认的步进为1;statements为在For和Next之间的一个或多个根据计数器指定的时间次数的语句。

步进值可以是正值,零或负值。表8-12列出了For-Next语句Loop计数器的说明。

表8-12 For-Next语句Loop计数器说明

当所有在Loop中的语句执行后,step会添加到counter。在此时,要么在loop中的什么再执行一次,或退出loop并继续执行语句后面的下一个语句。

还可放置任意数量的Exit For语句在Loop的任何位置,以作为退出的另一种方法。还可通过在另一处放置一个For-Next语句来嵌套For-Next语句,需要为每一个语句在其counter中一个唯一的变量名称。下面列出的结构是恰当的:

          For A=1 To 10
            For B=2 To 20
            For C=3 To 30
            …
          Next C
          Next B
          Next A

示例:

          for i=0 to 10 step 2
          s=sti
          next

(6)Function语句。声明Function过程的名称、参数及构成其主体的代码。其语法格式为:

          [Public | Private] Function name [(arglist)]
          [statements]
          [name = expression]
          [Exit Function]
          [statements]
          [name = expression]
          End Function

其中:Pulbic表示Function过程可被所有Script中的所有其他过程访问;Private表示Function过程只可被声明它的Script中的其他过程访问;Name为Function的名称,遵循标准的变量命名约定;Arglist为代表调用时要传递给Function过程的参数的变量列表(用逗号隔开多个变量);Statements为在Function过程的主体中执行的任意语句组;Expression为Function的返回值。

arglist参数包含下列语法和部分:

      [ByVal | ByRef] varname[( )]

ByVal表示该参数按值传递。

ByRef表示该参数按引用传递。

varname代表参数变量的名称;遵循标准的变量命名约定。

若没有显式指定使用Public或Private,则Function过程默认为公用,即它们对于Script中的所有其他过程是可见的。Function中局部变量的值在对过程的调用中不被保留。

所有可执行代码必须包含于过程中。不能在另一个Function或Sub过程中定义Function过程。

使用Exit Function语句可以从Function过程中立即退出。程序继续执行调用Function过程的语句之后的语句。可在Function过程的任何位置出现任意个Exit Function语句。

与Sub过程类似,Function过程是可以获取参数、执行一系列语句并改变其参数值的独立过程。与Sub过程的不同之处是,当要使用由函数返回的值时,可以在表达式的右边使用Function过程,这与内部函数的使用方式一样,如Sqr、Cos或Chr。

在表达式中,可以通过使用函数名,并在其后用圆括号给出相应的参数列表来调用Function过程。

示例:

      Function BinarySearch(...)
          ...
          ' 未找到该值。返回False值。
          If lower > upper Then
              BinarySearch = False
              Exit Function
          End If
          . . .
      End Function

(7)If...Then...Else语句。If...Then...Else语句用于执行基表达式值的一组语句,其语法格式为:

      If  condition Then[statements][Else[elsestements]]
          块语法格式为:
          If condition Then
          [statements]
          [ElseIf condition-n Then]
          [elseifstatements]]...
          [Else
          [elsestaements]]
          End If

其中:condition为必需的,可为任意表达式,若表达式不为逻辑型,则将转换为逻辑型;statements为可选的块格式;若没有Else子句时,则必须在单行,可通过冒号分隔为一个或多个语句,当条件为真时即可执行;condition-n为可选的任意逻辑表达式,若表达式为非逻辑型,则将转换为逻辑型;elseifstatements为可选,一个或多个语句当条件为真时即执行;elsestatements为可选,一个或多个可执行的语句,在没有先前条件或当condition-n为真时执行。

为了用于简单测试,缩短语法格式,可使用单行语法格式。对于更复杂和更灵活的应用中,可使用块语法。块语法结构同样易于阅读、修改和调试。

在单行语法格式中,可执行若干语句作为If...Then的结果。所有的语句必须在相同的行中通过冒号分隔开,示例如下:

      If  A>10  Then  A=A+1:B=B+A:C=C+B

在块语法中If语句必须在语句的行首位置,Else、ElseIf及End If的语句部分可优先与行编号或一个行标签。在块语法的If语句必须伴有End If为结尾。

若要确定是否一个语句为块If语句,可检查其之后跟随的关键字。若仅有一个注释出现在Then之后,且在同一行,则语句为单行If语句。Else和ElseIf子句都为可选,可根据需要在块If语句中使用多个ElseIf子句,但不能出现在Else自己后,块If语句可以嵌套使用。

在执行块If语句的过程中,condition是嵌套的,当condition为真时,则语句后面跟随的Then即被执行。当condition为假时,所有的ElseIf条件将轮流验证。当找到一个为真的条件是,则语句立即跟随相关联的Then即被执行。若ElseIf条件没有为真的(或没有ElseIf子句),则语句跟随的Else被执行。在执行语句跟随的Then或Else后,继续执行到End if为止。

示例:

      If x<y then x=y
      and
        If x<y then
        x=y
        End if

(8)Input#语句。Input#语句用于从打开的文本文件中读取数据并指派数据为变量,使用该语句需在输入模式下打开文件,当读取文件数据时,字符串或数值数据指派为变量时不会做修改操作,其语法结构为:

      Input #filenumber,varlist

其中:filenumber为必须的条件,可为任意有效的文件编号;varlist为必须的条件,可为从文件读取数据指派为变量的逗号定界符列表,不能为阵列或对象变量,但用可使用变量描述阵列的成员。

(9)Open语句。Open语句用于设置允许输入/输出到文件,需在执行任意I/O操作之前打开一个文件,为文件打开分配I/O缓冲区并确定访问使用缓冲区的模式。若文件已经通过另一个进程打开,并且指定访问的类型为不允许,则打开操作失败并报错误信息,其语法格式为:

      Open pathname For mode[Access access][lock]As[#]filenumber
      [Len=reclength]

其中:pathname为字符串表达式用于指定文件名,可包括目录和驱动器名;mode用于指定访问模式的关键字(Append、Binary、Input、Output、Random),若模式未指定,则文件以随机方式打开;access是可选的,用于指定在打开文件上的允许操作的关键字(Read、Write、Read Write);lock是可选的,用于指定通过其他处理对打开文件操作的约束关键字(Shared、Lock Read、Lock Write、Lock Read Write)。若指定的文件名不存在,则在打开的文件后添加创建二进制、输出或随机访问模式。

示例:

      Open "C:\data.txt" for read as #1

(10)Print#语句。Print#语句用于写入格式数据到连续的文件,其语法结构为:

      Print # filenumber,[outputlist]

其中:filenumber为任意有效的文件编号;outputlist是可选的,为用于打印的表达式或表达式列表,当outputlist为空时不写入文件,但当outputlist为无效时,则写入文件也无效。若省略outputlist并在filenumber后包括一个分隔的列表,则会打印一个空行到文件。

outputlist参数的设置如下:

      [{Spc(n) | Tab[(n)]}] [expression] [charpos]

Spc(n)用来在输出数据中插入空白字符,而n指的是要插入的空白字符数。

Tab(n)用来将插入点定位在某一绝对列号上,这里,n是列号。使用无参数的Tab将插入点定位在下一个打印区的起始位置。

Expression为要打印的数值表达式或字符串表达式。

charpos指定下一个字符的插入点。使用分号将插入点定位在上一个显示字符之后。用Tab(n) 将插入点定位在某一绝对的列号上,用无参数的Tab将插入点定位在下一个打印区的起始处。如果省略charpos,则在下一行打印下一个字符。

示例:

      Print #1, a, b, c
      Print #1, a, Spc(3), b

(11)ReDim语句。用于过程级声明动态数组变量并分配或重新分配存储空间。其语法结构为:

      ReDim [Preserve] varname(subscripts) [, varname(subscripts)] . . .

其中,

Preserve:当更改现有数组最后一维的大小时保留数据。

varname:变量名,遵循标准变量命名约定。

subscripts:数组变量的维数,最多可以声明60维数组。

subscripts参数语法格式如下:

      upper [,upper] . . .

数组的下界总是零。

ReDim语句通常用于指定或修改动态数组的大小,这些数组已用带有空括号的Private、Public或Dim语句(没有维数下标)正式声明过。可以重复使用ReDim语句更改数组维数和元素数目。

如果使用了Preserve关键字,就只能调整数组最后维的大小,并且不能改变数组的维数。例如,如果数组只有一维,就可以修改该数组的大小,因为该维是最后的也是仅有的一维。但是,如果数组有两个或更多维,就只能改变末维的大小并保留数组内容。

下面的样例示范了如何不删除动态数组的原有内容而又增加末维的大小。

      ReDim X(10, 10, 10)
      . . .
      ReDim Preserve X(10, 10, 15)

如果减小数组的大小,则将丢失被排除的元素中的数据。

示例:

      ReDim x(150)

(12)Set语句。将对象引用赋给变量或属性。其语法结构为:

      Set objectvar = {objectexpression | Nothing}

其中:

objectvar:变量或属性的名称,遵循标准变量命名约定。

objectexpression:由对象名称、另一个已声明为相同对象类型的变量或返回相同对象类型的对象的函数或方法组成的表达式。

Nothing:停止 objectvar 与任何指定对象的关联。当没有其他变量引用 objectvar 原来所引用的对象时,若将其赋为 Nothing 会释放与该对象所关联的所有系统和内存资源。

为确保有效,objectvar必须与所赋对象的类型一致。

Dim、Private、Public或ReDim语句只声明了引用对象的变量。只有使用Set语句将指定对象赋予该变量后,才能引用实际的对象。

通常,当使用Set语句将一个对象引用赋给变量时,并不是为变量创建对象的副本,而是创建对象的引用。可有多个对象变量引用同一个对象。因为这些变量是对象引用(不是副本),所以对对象所作的任何改动都会影响所有引用该对象的变量。

(13)Sub语句。声明Sub过程的名称、参数及构成其主体的代码。其语法结构为:

      [Public | Private] Sub name [(arglist)]
      [statements]
      [Exit Sub]
      [statements]
      End Sub
      其中:

Public:表示 Sub 过程可被所有Script中的其他过程访问。

Private:表示 Sub 过程只可被声明该过程的Script中的其他过程访问。

name:Sub 的名称,遵循标准变量命名约定。

arglist:代表在调用时要传递给 Sub 过程的参数的变量列表。用逗号隔开多个变量。

statements:Sub 过程主体内所执行的任何语句组。

arglist参数包含下列语法和部分:

[ByVal | ByRef] varname[( )]

ByVal: 表示该参数按值传递。

ByRef:表示该参数按引用传递。

varname:代表参数的变量名称,遵循标准变量命名约定。

若没有显式地指定使用 PublicPrivate,Sub 过程默认为公用,即它们对于Script中的所有其他过程都是可见的。Sub 过程中局部变量的值在调用过程中不被保留。

所有可执行代码必须包含于过程中。不能在另一个Sub或Function过程中定义一个Sub过程。

使用Exit Sub语句可以立即从Sub过程中退出。程序继续执行调用Sub过程的语句之后的语句。可以在Sub过程中任意位置出现任意个Exit Sub语句。

与Function过程类似,Sub过程是一个可以获取参数,执行一系列语句,以及可改变其参数的值的独立过程。而与Function过程不同之处是,Function过程可以返回值,而Sub过程不能用于表达式中。

可以使用过程名并跟随相应的参数列表来调用Sub过程。

(14)While…Wend语句。当指定的条件为 True 时,执行一系列的语句。其语法结构为:

      While condition
      [statements]
      Wend

其中:

condition:数值或字符串表达式,其计算结果为 TrueFalse

statements:在条件为True时执行的一条或多条语句。

如果condition为True,则statements中所有Wend语句之前的语句都将被执行,然后控制权将返回到While语句,并且重新检查condition;若condition仍为True,则重复执行上面的过程。如果不为True,则从Wend语句之后的语句继续执行程序。

While...Wend循环可以是多层嵌套结构。每个Wend与最近的While语句对应。

(15)Width #语句。将一个输出行的宽度指定给用Open语句打开的文件。其语法结构为:

      Width #filenumber, width

其中:

filenumber;任何有效的文件号。

width:范围在0~255之间的数值表达式,在新的一行开始之前,指出在该行上可出现多少字符。如果width=0,则行的长度不受限制。width的默认值为0。

示例:

      Width #2, 100

5)函数

(1)Asc函数。该函数可返回一个字符串中第一个字符的ASII码。其语法结构为:

      Asc(String)

其中:String任意有效的字符表达式;若String没有包含字符,则会发生运行错误。

示例:

      i=Asc("abc")

(2)Atn函数。该函数用于计算直角三角形两个边的比值(number),并返回对应角的弧度值。此比值是该角对边的长度与邻边长度之比。结果的范围是从-π/2~π/2 rad。弧度变换为角度的方法是将弧度乘以π/180。反之,角度变换为弧度的方法是将角度乘以180/π。其语法结构为:

      Atn(number)

其中:number为任意表达式;若表达式为非逻辑型,则将其转换为一个逻辑类型。

示例:

      f=atn(2)

(3)Chr函数。该函数用于返回与指定ANSI字符代码相对应的字符。其语法结构为:

      Chr(Charcode)

其中:Charcode的取值范围是0~255,其中0~31表示不可打印的代码。例如:Chr(10)返回换行符。

示例:

      C=chr(64)

(4)Command函数。该函数可返回用于启动程序的命令行,包括执行文件的路径。其语法结构为:

      Command

其中:当从命令行运行程序是,该命令对应Macro scripts为可用。

示例:

假设程序由以下命令运行:

          BlazeRouter log:logfile.log preview.pcb
          则Command函数返回:
          "C:\Program  Files\Mentor  Graphics\PADS\<latest  release>\Programs\BlazeRouter.exe  log:logfile.log
  preview.pcb"

(5)Cos函数。该函数用于返回某个角的余弦值。其语法结构为:

      Cos(number)

其中:number为任意某个以rad为单位表示的角的有效数值表达式。

示例:

          x = Cos(1.57)

(6)CreateObject函数。该函数用于创建并返回一个ActiveX对象的引用。其语法结构为:

          CreateObject(class,[servername])

其中:class为字符串、应用程序名称或创建对象的类。

servername为可选项,是字符串、创建对象的网络服务器名称。若远程服务器不存在或不可用,则发生运行错误。

当使用语法appname.objectype时:

appname为字符串,对象提供的应用程序名称。

objecttype为字符串,创建对象的类型或类。

若要创建ActiveX对象,将CreateObject函数返回的对象赋值给某对象变量。

示例:

      Set obj=CreateObject("PowerPCB.Application")

(7)CurDir函数。该函数用于返回当前路径的变量字符串。其语法结构为:

      CurDir[(drive)]

其中:drive为可选的任意指定存在的驱动器字符串表达式。若没有指定的驱动器或驱动器字符串长度为0(""),则CurDir返回当前驱动器的路径。

示例:

      s=CurDir("d:")

(8)Dir函数。该函数用于返回文件名称或目录的字符串,可匹配指定的样式、文件特征值或驱动器卷标。其语法结构为:

      Dir(pathname)

其中:pathname为可选的指定文件名称的字符串表达式,也可包括目录和驱动器名称。若没有找到路径名称则返回0长度的字符串("")。Dir函数支持使用多个字符(*)和单个字符(?)通配符指定多个文件。

示例:

若要获得C:驱动器根目录的第一个文件名,则:

      Dir("C:\*.*")

若要获得相同路径下一个文件,则:

      Dir

若要在C:\My Documents\PADS Projects\Samples目录中开始另一个搜索,则:

          Dir("C:\My Documents\PADS Projects\Samples\*.*")

(9)DoEvents函数。该函数用于临时返回控制器给操作系统,并允许它完成其他可能发生的事件。其语法结构为:

      DoEvents()

若宏执行一个很长的计算时,该函数非常有用。插入DoEvents可在队列中阻止未处理事件的堆积。

(10)Environ函数。该函数用于返回与操作系统关联的环境变量字符串。其语法格式为:

      Environ[(envstring)]

其中:envstring为可选的包含环境变量名称的字符串表达式。若envstring在环境变量表中找不到,则会返回一个0长度的字符串("")。

示例:

      s=Environ("path")

(11)Eof函数。当到达为进行随机或连续输入访问而打开的文件的末尾时,该函数将返回一个包含值True的类型的值。

使用EOF可避免由于试图获取超过文件末尾的输入而产生的错误。

在到达文件末尾之前,EOF函数将返回False。对于为进行随机或二进制访问而打开的文件,EOF将返回False,直至最后一个执行的Get语句无法读取整个记录。

对于为进行二进制访问而打开的文件,如果试图使用Input函数读取整个文件直至EOF返回True,将产生错误。当用Input读取二进制文件时,请用LOF和Loc函数(而不是EOF),或在使用EOF函数时使用Get。对于为进行输出访问而打开的文件,EOF始终返回True。

其语法结构为:

      Eof[(filenumber)]

其中filenumber为可选的,包含有效文件编号的整数。

示例:

      If Eof (1) then…

(12)Exp函数。该函数用于返回e(自然对数的低)的幂次方。其语法结构为:

      Exp(number)

其中:number为有效的数值表达式。

若number参数超过709.782812893,则会出现错误。常数e的值约为2.718282。

示例:

      x=exp(y)

(13)GetObject函数。该函数可返回对ActiveX组件的一个引用。其语法结构为:

      GetObject([pathname] [,class])

其中:

path为可选的变量字符串。完整的文件路径和名称,文件中包含了要检索的对象。如果忽略了pathname,则需要class。

class为可选项,是对象的类的变量字符串。

使用GetObject函数可以从文件中,以及指派对象至一个对象变量,访问一个Active X对象。使用Set语句可指派对象,由GetObject函数返回至对象变量。

示例:

      Obj=GetOjbect(,"PowerPCB.Application")

(14)GetTmpFileNmae函数。该函数可返回一个用于保证由String识别为唯一的指定的新文件名称。其语法结构为:

      GetTmpFileName(string)

其中:string为字符串表达式。

示例:

      s=GetTmpFileName("d:\tmp")

(15)InStr函数。该函数用于返回某字符串在另一字符串中第一次出现的位置。其语法结构为:

      InStr([start, ]string1, string2)

其中:

strat为可选的数值表达式,用于设置每次搜索的开始位置。若省略,将从第一个字符的位置开始搜索。若start包含Null,则会出现错误。如果已指定compare,则必须要有start参数。

string1为接受搜索的字符串表达式。

string2是要搜索的字符串表达式。

若string 1长度为0,则InStr返回0。

若string 2长度为0,则InStr返回start。

若string 2没有找到,则InStr返回0。

若string 2在string 1中找到,则找到匹配字符串的位置。

若start>string,则InStr返回为0。

示例:

          i = InStr(1,"cbc","c")

(16)InStrRev函数。该函数返回某字符串在另一个字符串中出现的从结尾计起的位置。其语法结构为:

          InStrRev(string1, string2, [start])

其中:

string 1为接受搜索的字符串表达式。

string 2为被搜索的字符串表达式。

start为可选的数值表达式,用于设置每次搜索的开始位置。若省略,则默认值为-1,表示从最后一个字符的位置开始搜索。若start包含Null,则出现错误。

若string1长度为0,则InStrRev返回0。

若string2长度为0,则InStrRev返回start。

若string 2没有找到,则InStrRev返回0。

若string 2在string 1中找到,则InStrRev找到匹配字符串的位置。

若strart>Len(string 2),则InStrRev返回0。

示例:

          InStrRev("abcdbc", "bc")

则返回“4.”

(17)Left函数。该函数返回指定数目的从字符串的左边算起的字符。其语法结构为:

      Left(string, length)

其中:string为字符串表达式,其最左边的字符被返回,若string参数中包含Null,则返回Null。length为数值表达式,指明要返回的字符数目,若为0,返回零长度字符串(""),若大于或等于string参数中的字符总数,则返回整个字符串。

示例:

      Left("abcd", 2)
      则返回“ab.”

(18)Len函数。该函数返回字符串内字符的数目,或是存储一变量所需的字节数。其语法结构为:

      Len(string)

其中:

string为任意有效的字符表达式。

示例:

          Len("abcd")
      则返回4

(19)Mid函数。该函数从字符串中返回指定数目的字符。其语法格式为:

mid(string,start,[length])

其中:

string为字符串表达式,从中返回字符。

start为string中被提取的字符部分的开始位置。如果start超过了string中字符的数目,Mid将返回零长度字符串 ("")。

length为要返回的字符数。若省略或length超过文本的字符数(包括start处的字符),将返回字符串中从start到字符串结束的所有字符。

示例:

      Mid("abcdbc", 3, 2)
      则返回“cd.”

(20)MkDir函数。该函数可创建新的目录。其语法结构为:

      MkDir(path)

其中:

path为识别创建的目录的字符串表达式。路径可以包括驱动器,若没有知道驱动器,则MkDir函数在当前驱动器中创建新的目录。

示例:

      MkDir ("D:\newdir")

(21)MoveFile函数。该函数可由path1移动文件至指定的path2。其语法结构为:

      MoveFile(path1,path2)

其中:path1、path2为字符串表达式。

示例:

      MoveFile("C:\data.bin","D:\")

(22)MsgBox函数。该函数可显示信息对话框,用于等待单击按钮并返回一个整数值,用于确定单击的按钮。其语法结构为:

      MsgBox(prompt [, buttons] [, title])

其中:

prompt为作为消息显示在对话框中的字符串表达式。prompt的最大长度大约是1024个字符,这取决于所使用的字符的宽度。如果prompt中包含多个行,则可在各行之间用回车符(Chr(13))、换行符(Chr(10))或回车换行符的组合(Chr(13) & Chr(10))分隔各行。

buttons为可选的数值表达式,是表示指定显示按钮的数目和类型、使用的图标样式,默认按钮的标识,以及消息框样式的数值的总和(有关数值请参阅“设置”部分)。若省略,则buttons的默认值为0。

title为可选的显示在对话框标题栏中的字符串表达式。若省略title,则将应用程序的名称显示在标题栏中。

MsgBox按钮设置说明见表8-13。

表8-13 MsgBox按钮设置说明

第一组值(0~5)用于描述对话框中显示的按钮类型与数目;第二组值(16, 32, 48, 64)用于描述图标的样式;第三组值(0, 256, 512)用于确定默认按钮;而第四组值(0, 4096)则决定消息框的样式。当为按钮参数加上这些数字以创建最终的值时,只能从每一个群组中使用一个数字。

MsgBox返回值说明见表8-14。

表8-14 MsgBox返回值说明

示例:

MsgBox("Hello",mbOK, "This is a message box")

(23)Right函数。该函数可从字符串右边返回指定数目的字符。其语法结构为:

      Right(string,length)

其中:

string为字符串表达式,其最右边的字符被返回。

length为数值表达式,指明要返回的字符数目。若为0,返回零长度字符串;若此数大于或等于string参数中的所有字符数目,则返回整个字符串。

示例:

      Right("abcdbc", 3)

则返回“dbc.”

(24)Sin函数。该函数可返回某个角的正弦值。其语法结构为:

      Sin(number)

其中:Number为参数可以是任何将某个角表示为弧度的有效数值表达式。Sin函数取某个角并返回直角三角形两边的比值。此比值是直角三角形中该角的对边长度与斜边长度之比。结果的范围在 -1~1之间。将角度乘以π/180即可转换为弧度,将弧度乘以180/π即可转换为角度。

示例:

      x=sin(y)

(25)Spc函数。该函数连同Print#语句使用或连同Print方法值定位输出。其语法结构为:

      Spc(n)

其中:n为在显示或打印列表中下一个表达式中插入的空格数量。

示例:

      Spc(3)

(26)Str函数。该函数返回指定数值的字符串。其语法结构为:

      Str(number)

其中:Number为任意表达式。若表达式不是数值型,则将转换为数值类型。

示例:

      x=Str(324)

(27)Tab函数。该函数连同Print#语句或Print方法至定位输出使用。其语法结构为:

      Tab[(n)]

其中:n为在显示或打印列表中下一个表达式之前移动的列数量(可选)。

示例:

      Tab(2)

(28)Val函数。该函数返回由数字组成的字符表达式的数字值。其语法结构为:

      Val(string)

其中:string为任意有效的字符串表达式。

Val()函数从左到右返回字符表达式中的数字,直至遇到非数值型字符(忽略前面的空格)时为止。若字符表达式的第一个字符不是数字,也不是加、减号,则val()函数返回0。VAL()函数可以将Visual FoxPro的SYS()函数返回的字符串转换为数值。

示例:

      i=Val("123")

6)自动支持 程序中的宏引擎支持接受自动控制的对象。当使用CreateObject()创建对象或使用GetObject()后,对象的方法可能使用以下的语法调用。

          Object.Method arg1, ..., argn
          var = Object.Method( arg1, ..., argn )
          var = Object.Property
          Object.Property = expression

7)对话框控制PADS中的宏语言可用于以下所列对话框控制操作:CheckBox、CheckListBox、ComboBox、EditBox、GridControl、ListBox、PushButton、RadioBox、SliderControl、SpinButton、TabControl、TreeItem、TreeView。

(1)CheckBox(复选框)

① 声明:该方法用于设置复选框的状态。

② 语法:Checkbox.State(iState)

③ 参数:iState为数值表达式,见表8-15。

表8-15 Checkbox.State iState值

④ 值属性:该方法可返回或设置复选框的状态。

⑤ 语法:Checkbox.Value[=iState]

⑥ 参数:iState为数值表达式,见表8-16。

表8-16 CheckBox.Value iState值

(2)CheckListBox(复选列表框)

① 声明:该方法用于设置复选列表框的选中状态。

② 语法:CheckListBox.State(string)

③ 参数:string:为任意有效字符串表达式,包括列表中可选的项目。

④ ListCount属性:该方法可返回复选列表框中条目数。

⑤ 语法:CheckListBox.ListCount

⑥ 选择属性:该方法可返回或设置在复选列表框中的复选状态。该属性为带有相同列表属性条目编号的布尔值阵列。

⑦ 语法:CheckListBox.Check(index)[=boolean]

⑧ Text属性:该方法可返回在复选列表框中当前选中的文本条目。

⑨ 语法:CheckListBox.Text

(3)ComboBox(组合框)

① Select:该方法可设置组合框的选择状态。

② 语法:ComboBox.Select(string)

③ 参数:string为字符串表达式,包含在组合框中用于选择的字符串。

④ 示例:ActiveLayer.Select("Top")

⑤ Edit:该方法用于设置组合框的编辑状态。

⑥ 语法:ComboBox.Edit(string)

⑦ 参数:string:为字符串表达式,包含了组合框中编辑框中插入的字符串。

⑧ Text属性:该方法可返回或设置组合框的文本。

⑨ 语法:ComboBox.Text[=string]

⑩ 参数:string:为字符串表达式,包含在组合框中设置的文本。

⑪List属性:该方法可返回或设置包括在组合框列表中的条目。

⑫语法:ComboBox.List(index)

⑬SelStart属性:该方法可返回或设置所选文本的开始点。若没有选择文本,该方法则确认插入点的位置。⑭语法:ComboBox.SelStart[=index]⑮SelText属性:该方法可返回或设置所需字符的数量。⑯语法:ComboBox.SelLength[=number]⑰参数:该参数为一个字符串表达式,包括在编辑框中设置的文本。

(4)EditBox(编辑框)

① 声明:该方法用于设置编辑框的状态。

② 语法:EditBox.State(string)

③ 参数:string为在编辑框中显示文本的字符串表达式。

④ Text属性:该方法可返回或设置编辑框文本。

⑤ 语法:EditBox.Text[=string]

⑥ SelStart属性:该方法可返回或设置所需文本的起始点。若没有选择文本,则会确定插入点的位置。

⑦ 语法:EditBox.SelStart[=index]

⑧ SelText属性:该方法可返回或设置包含当前所需文本的字符串。若没有选择字符,则返回0长度字符串("")。

⑨ 语法:EditBox.SelText[=string]

⑩ 参数:string为字符串表达式,包含在编辑框中设置的文本。

(5)GridControl(栅格控制):该控制表现为在对话框中设置栅格,可使用Control方法引用一个详细的栅格控制。

(6)ListBox(列表框)

① 声明:该方法可设置列表框中选择状态。

② 语法:ListBox.State(string)

③ 参数:string:为文本串表达式,包含所选的条目编号。

④ List属性:该方法可返回在对话框框中列表部分包含的条目。

⑤ 语法:ListBox.List

⑥ SelCount属性:该方法可返回列表框中所需条目的数量。

⑦ 语法:ListBox.SelCount

⑧ Selected属性:该方法可返回或设置列表框中一个条目的选择状态。

⑨ 语法:ListBox.Selected(index) [=boolean]

⑩ Text属性:该方法可返回列表框中当前所选条目文本。

⑪语法:ListBox.Text

(7)Push Button

① Click:该方法可仿效按下一个按钮。

② 语法:button.Click()

③ 示例:dlg.control("OK").click()

(8)RadioBox

① 声明:该方法用于检查选项按钮的状态。

② 语法:RadioBox.State(iState)

③ 参数:iState为数值表达式,表现为检查选项按钮的位置,-1表示没有选择按钮。

④ Value属性:该方法可返回或检查选项按钮的状态。

⑤ 语法:RadioBox.Value[=iState]

⑥ 参数:iState为数值表达式,表现为用于检查选项按钮的位置。-1表示没有选中按钮。

(9)SliderControl(滑块控制)

① 声明:该方法可设置滑块的状态。

② 语法:SliderControl.State(iState)

③ 参数:iState:为数值表达式。

④ Value属性:该方法可返回或设置当前滑块的位置。

⑤ 语法:Slider.Value[=val]

⑥ 参数:val为数值表达式。

(10)SpinButton(微调按钮)

① 声明:该方法可设置微调按钮的状态。

② 语法:SpinButton.State(iState)

③ 参数:iState为数值表达式。

(11)TabControl(标签页控制)

① 声明:该方法用于设置标签页的选择状态。

② 语法:TabControl.State(iState)

③ 参数:iState为数值表达式,用于确定标签页的位置。

④ 示例:dlg.Control("Tab").State(3)

⑤ Value属性:该方法用于返回或设置当前标签页的位置。

⑥ 语法:TabControl.Value[=tab]

⑦ 参数:Tab为用数值表达式确定标签页的位置或用文本串表达式确定标签页标题。

(12)TreeItem(树形条目)

① Select:该方法可设置树形条目的选择状态。

② 语法:TreeItem.Select(flag)

③ 参数:flag为数值表达式,可能具有表8-17所列的值。

表8-17 TreeItem.Select flag值

④ 示例:item.Select(true)

⑤ Expand:该方法可设置树形条目的展开状态。

⑥ 语法:TreeItem.Expand(flag)

⑦ 参数:flag为数值表达式,可能具有表8-18所列的值。

表8-18 TreeItem.Expand flag值

⑧ 示例:item.Expand(true)

⑨ Focus:该方法用于设置树形条目至条目的焦点。

⑩ 语法:TreeItem.Focus()

⑪示例:item.Focus(1)

(13)TreeView(树形视图)

① Item方法:该方法可返回一个TreeItem对象。

② 语法:TreeView.Item(itemname)

③ 参数:itmname为确定条目名称的字符串表达式。

④ 示例:item = tree.Item("Net Objects\Nets\end")

⑤ BeginDrag方法:该方法仿效拖曳条目离开目录树。

⑥ 语法:TreeView.BeginDrag(itemname)

⑦ 参数:itemname为确定拖曳条目名称的字符串表达式。

⑧ Copy方法:该方法用于复制所选的条目至剪贴板。

⑨ 语法:TreeView.Copy(itemname)

⑩ Drop方法:该方法用于仿效在条目上拖曳条目。

⑪语法:TreeView.Drop(itemname)

⑫Paste方法:该方法用于粘贴剪贴板中内容至所选的分支。

⑬语法:TreeView.Paste(itemname)

⑭参数:itemname为确定粘贴条目名称的文本串表达式。

⑮CreateNewItem方法:该方法可在所选的分支中创建新的条目。该方法可返回与创建条目对应的TreeItem对象。

⑯语法:TreeView.CreateNewItem(itemname)

⑰参数:itemname为确定创建条目名称的字符串表达式。

8)内置宏对象PADS中内置的宏对象包括以下所列的对象。

Application Object

Dialog Objects

Document Object

HelpContents Object

HelpContentsItem Object

HelpPane Object

Main View Object

Project Explorer Object

(1)Application对象。该对象具有以下11种方法。

① CreateNewDocument方法。该方法可创建一个空文件。其语法结构:

          Application.CreateNewDocument

② ExecuteCommand方法。该方法可执行程序的其中一个命令。其语法结构为:

          Application.ExecuteCommand(command, [arg1,...])

参数:command为确定一个PADS产品命令的文本串表达式。arg1,…为可选的、确定可选的参数

示例:

           Application.ExecuteCommand("ID_VIEW_BOARD")
           Application.ExecuteCommand("Open", "c:\My Documents\PADS Projects\prevfiew.pcb")

③ Help方法。该方法用于调用Help。其语法结构为:

          Application.Help()

④ HelpContents方法。该方法可在Help Contens窗口中返回Help内容。其语法内容为:

          Application.HelpContents

示例:

          Set var = Application.HelpContents

⑤ HelpPane方法。该方法可返回Help窗口。其语法内容为:

          Application.HelpPane

示例:

          Set var = Application.HelpPane

⑥ OpenCustomizeDialog方法。该方法可打开自定义模式对话框。其方法为:

          Application.OpenCustomizeDialog()

⑦ OpenDocument方法。该方法可打开通过路径参数打开已有的文件。其语法结构为:

          Application.OpenDocument(path)

参数:path为包括文件路径的字符串表达式

示例:Application.OpenDocument("C:\My Documents\PADS Projects.preview.pcb")

⑧ OpenOptionsDialog方法。该方法可打开Options modeless对话框。其语法格式为:

          Application.OpenOptionsDialog()

⑨ OpenProperitesDialog方法。该方法可打开Properites modeless对话框。其语法结构为:

          Application.OpenPropertiesDialog()

⑩ Quit方法。该方法可退出应用程序。其语法结构为:

          Application.Quit()

⑪RunMacro方法。该方法可执行一个程序命令。其语法结构为:

          Application.RunMacro(path[, function [, arg1, ...]])

参数:path为包括运行宏的路径的字符串表达式。function为可选的函数名称或宏文件中调用的sub。arg1,…为可选的通过函数的参数

示例:

          Application.RunMacro("C:\My Docuements\PADS Projects\mymacro.mcr")
          Var = Application.RunMacro(“c:\y Docuements\PADS Projects\mymacro.mcr”, myfunction”, 1, 2, 3)

(2)Dialog对象。该对象具有以下5种方法。

① Control方法。该方法可返回一个对话框控制。其语法结构为:

          Dialog.Control(controlname)

参数:controlname为确定控制名称的字符串表达式

示例:返回OK按钮的示例:

          set obj = dlg.Control("OK")

② HeopPane方法。该方法可显示对话框的Fly-out Help窗口。

③ CloseHelpPane方法。该方法可关闭在对话框中打开的Help面板。其语法结构为:

          Dialog.CloseHelpPane

④ OpenHelpPane方法。该方法可显示对话框的Help面板。其语法结构为:

          Dialog.OpenHelpPane

⑤ ShowHelpFor方法。该方法用于显示指定控制的帮助信息。其语法结构为:

          Dialog.ShowHelpFor(controlname)

参数:controlname为控制的名称

示例。该示例为Apply按钮显示帮助信息:

          Dialog.ShowHelpFor("Apply")

(3)Document对象:该对象具有以下5种方法。

① Print方法。该方法用于打印文件。其语法结构为:

          Document.Print()

② PrintSetup方法。该方法可打开Print Setup对话框。其语法结构为:

          Document.PrintSetup()

③ RepeatLastAction方法。该方法用于重复当前会话过程中执行的最后一个动作。其语法结构为:

          Document.RepeatLastAction()

④ Save方法。该方法用于保持文件。其语法结构为:

          Document.Save()

⑤ SaveAs方法。该方法用于保持文件至一个设计人员定义的名称或路径。其语法结构为:

          Document.SaveAs(path)

参数:path为确定保持文件路径的字符串表达式

(4)HelpContents对象

① Item:该属性用于在当前内容树中查找Help内容的位置。

② 语法:Application.HelpContents.Item (path)

③ 示例:Set item = Application.HelpContents.Item("File Operations\To Restore Files")

(5)HelpContentsItem对象:该对象具有以下4种属性和所选的一种方法。

① Location属性。该属性用于返回条目的位置。其语法结构为:

          Item.Location

示例:

          Set item = Application.HelpContents.Item("File Operations\To Restore Files")
          item_loc = item.Location

② Name属性。该属性可返回条目的名称。其语法格式为:

          Item.Name

示例:

          Set item = Application.HelpContents.Item("File Operations\To Restore Files")
          item_name = item.Name

③ Select方法。该方法用于选择条目。其语法结构为:

          Item.Select

示例:

          Set item = Application.HelpContents.Item("File Operations").SubItem(3)
          item.Select

④ SubItem属性。该属性可在其位置返回条目的子条目。其语法结构为:

          Item.SubItem(pos)

示例:

          Set item = Application.HelpContents.Item("File Operations").SubItem(3)
          item_name = item.Name

⑤ SubItemCount属性。该属性可返回在条目中子条目的数量。其语法结构为:

          Item.SubItemCount

示例:

          Set item = Application.HelpContents.Item("File Operations")
          count = item.SubItemCount

(6)HelpPane对象

Docuement属性:该属性用于在Help窗口中显示HTML文件。该顺序使用Document Object Model(DOM)。

(7)Main View对象:该对象使用以下9种方法。

① ActiveLayer方法。该方法可显示活动层组合框。其语法结构为:

          MainView.ActiveLayer

示例:

          set layerCombo = MainView.ActiveLayer

② ToggleFullScreen方法。该方法用于打开全屏模式。其语法格式为:

          MainView.ToggleFullScreen()

③ MouseDown方法。该法用于仿效按下鼠标按钮。其语法格式为:

          MainView.MouseDown(x, y, button)

参数:x为任意数值表达式,光标的x坐标。y为任意数值表达式,光标的y坐标。button为按下按钮的字符串表达式。

按钮的参数可能包括一个或多个以下所列的值和修改,见表8-19。

表8-19 MainView.MouseDown button值

④ MouseEndDrag方法。该方法用于仿效结束鼠标拖曳操作。其语法结构为:

          MainView.MouseEndDrag(x, y, button)

参数:x为任意数值表达式,光标对应的x坐标。y为任意数值表达式,光标对应的y坐标。button为按下按钮的字符串表达式,见表8-20。

表8-20 MainView.MouseEndDrag button值

⑤ MouseMove方法。该方法用于仿效鼠标移动。其语法结构为:

          MainView.MouseMove(x, y, button)

参数:x为任意数值表达式,光标对应的x坐标。y为任意数值表达式,光标对应的y坐标。button为字符串表达式,见表8-21

表8-21 MainView.MouseMove button值

示例:MainView.MouseMove(300,350,"+L")

⑥ MouseStartDrag方法。该方法用于仿效开始一个鼠标拖曳操作。其语法格式为:

          MainView.MouseStartDrag(x, y, button)

参数:x为任意数值表达式,光标对应的x坐标。y为任意数值表达式,光标对应的y坐标。button为字符串表达式,见表8-22。

表8-22 MainView.MouseStartDrag button值

⑦ MouseUp方法。该方法用于仿效释放鼠标按钮。其语法结构为:

          MainView.MouseUp(x, y, button)

参数:x为任意数值表达式,光标对应的x坐标。y为任意数值表达式,光标对应的y坐标。button为字符串表达式,见表8-23。

表8-23 MainView.MouseUp button值

⑧ Print方法。该方法用于打印当前视图。其语法结构为:

                          MainView.Print()

⑨ PrintPreview方法。该方法用于打开打印预览模式。其语法结构为:

                          MainView.PrintPreview()

(8)Project Explorer对象:该对象是树形视图类型,体现为该程序的项目浏览器。