如果你想在text成员中模仿锚点功能,这不是很难,你要做的就是利用text成员的hyperlink方法的优点。为text成员创建超连接,只要打开这个窗口就可以了。
你只需选择一些文本,然后在这个inspector最下面的地方随便输入一个你想要的超链接。如果你想要创建锚点,那么你应该对这些锚点应用统一的命名原则,这样你的锚点名字就不会和文本成员中其他的文本重名。例如,如果你想让这个超链接实现锚点功能,那么你可以这样给它起名字 Anchor:top,Anchor:item1 ,或者 Anchor:item2. 如果你想让这个超链接跳到一个锚点的话,那么你可以给它起一些很流行的HTML语法,比如:#top,#item1,或者#item2。
当你创建了所有的锚点和锚点超链接之后,所剩下的就是写代码了,那么首先,我们要写一个句柄来生成一个包含该text成员中所有锚点的列表。
on buildHyperlinkList me
pHyperlinkList = [:]
pMemRef = sprite (me.spriteNum).member
tempList = pMemRef.hyperlinks
repeat with i = 1 to tempList.count
tempLink = pMemRef.char[templist[ i ][1]].hyperlink
if tempLink starts ‘‘Anchor:‘‘ then
tempLink = value (‘‘#‘‘ & tempLink.word[2])
pHyperlinkList.addProp (tempLink, tempList[ i ][1] - 1)
end if
end repeat
end
在这段代码中,先创建一个空的属性列表,然后用一个变量指向这个behavior所作用的精灵的成员。然后,将这个member中所有的超链接用一个临时表来指代。当然这里包含锚点和锚点超链接。hyperlinks属性是一个线形表,它包括text成员中所有的超链接。hyperlinks表中的每一项对应一个超链接的起始字符数和中止字符数,例如,一个文本的hyperlinks表可能是这个样子的:
-- [[1, 20], [24, 29], [32, 37], [40, 45], [48, 53], [60, 65], [1703, 1713], [1722, 1727], [3365, 3375], [3384, 3389], [5027, 5037], [5046, 5051], [6689, 6699]]
当你拥有了这个hyperlink表之后,你就可以历遍这个表,其中每一项,你可以使用text成员的hyperlink属性来取得该连接的特殊连接名字,就是你创建它时在inspector最下面写入的字符串。
不要混淆这两种属性hyperlinks和hyperlink,hyperlinks(复数)属性显示的是一个数字列表,描述的是每一个连接的始末位置。而hyperlink(单数)则是显示某一个链接的链接文本。现在我们有了hyperlink的文本,你可以检查这个文本是不是你命名的锚点之一,如果这个文本以Anchor开头,那么你就应该把这个锚点的名字提取出来,转成符号。最后,随同这个链接在文本中的其实位置,一起添加倒你的超链接表中,当这个句柄完成之后,你应该得到一个类似这样的一个列表。
-- [#top: 0, #item1: 59, #item2: 1721, #item3: 3383, #item4: 5045]
最后一步就是写一个点击链接时需要文本自动滚动的句柄了。
on hyperlinkClicked me, data, range
if data.char[1] = ‘‘#‘‘ then
destinationAnchor = value(data)
if not voidP(pHyperlinkList.getAProp(destinationAnchor)) then
if pHyperlinkList[destinationAnchor] <= 0 then
pMemRef.scrollTop = 0
pMemRef.scrollTop = charPosToLoc(pMemRef, pHyperlinkList[destinationAnchor]).locV
end if
end if
end if
end
这个句柄中,首先是检查超链接时候是以#开头,如果是的话,就应该跳到相应的锚点处。然后用value方法将超链接字符串转成符号,然后,检查这个符号是否存在于先前我们创建的那个列表中,如果在的话,最后一步就是滚动文本到这个符号相对应的数字处,如果你要跳到的那个字符数小于或等于0,则需要把文本成员的scrolltop值设成0。否则将文本的scrolltop值设成相应的数字。通过charPosToLoc方法可以判断文本成员中字符的位置。
还有一点需要注意的是,我们这么做会使文本中锚点的文本也会想超链接一样带一个下划线,而实际上我们是不需要用户看到这些的,如何解决呢?我们可以将the useHypertextStyles属性设成false就可以了。这样做之后,所有链接的颜色将不再是蓝色了。而且也没有下划线了和鼠标的变化了。缺点就是,这个属性作用于所有的链接,从此我们将无法区分那些文本带超链接。所以我们必须人为的将你的超链接文本加上下划线并且把它的fontcolor设成蓝色。
windows例子下载 MAC例子下载