1

我想用脚本创建一组按钮。这包括设置大小和位置以及分配 mouseUp 处理程序。

mouseUp 处理程序应该是

on mouseUp
    go to card "aName"
end mouseUp

名称列表位于文本变量 tCardNames 中。每行都有一个卡名。

4

3 回答 3

1

以下脚本完成了这项工作

on createButtons
   repeat with i = 1 to the number of lines of tCardNames
      put line i of field "cardNames" into tName
      createNamedButton i, tName
   end repeat
end createButtons

on createNamedButton n, aName
   create button
   set the label of it to aName
   put "on mouseUp" & return into s
   put  "go to cd "  & quote & aName & quote& return after s
   put "end mouseUp" after s
   set the script of it to s
   put (10 + 30 * (n -1)) into tDistanceFromTop
   set the top of it to tDistanceFromTop
end createNamedButton
于 2013-06-15T17:52:21.017 回答
1

该脚本应该可以正常工作,但是由于所有按钮都具有基本相同的脚本,因此您可以省略处理程序的脚本部分,并为它们分配一个行为。这是何时使用行为的一个很好的例子。行为按钮脚本将是这样的:

on mouseUp
  go cd (the label of the target)
end mouseUp

创建该按钮,将其命名为“goCardBehavior”,将其隐藏,然后在您的原始处理程序中添加此行而不是编写脚本的部分:

set the behavior of it to the long ID of button "goCardBehavior"

使用行为的一个优点是,当您以后需要更改脚本时,您只需在一个地方进行。

于 2013-06-16T04:32:21.707 回答
0

这是一种略有不同的方法。对于长列表,对于长列表的repeatrepeat with更有效,但在这种情况下,可能没有明显的区别。

on createButtons
  repeat for each line tBtnName in tCardNames
    createNamedButton tBtnName
  end repeat
end createButtons

on createNamedButton pName
  create button pName
  set the script of btn pName to "on mouseUp" & cr & \
    "go cd " & quote & pName & quote & cr & \
    "end mouseUp"
  put the number of btn pName into tNum
  set the top of btn pName to (10 * 30 * (tNum - 1))
end createNamedButton
于 2013-06-16T04:48:22.803 回答