花了几个小时试图弄清楚这一点,但仍然没有得到它。没有任何文档提到它。如果不手动重新排列所有内容,这是 rebol 无法做到的吗?
也许我只是期待太多?
编辑:好吧,我发现了一个 hack:indent num,然后 indent -num 在下一行。在这种语言的所有壮观特性中,为什么他们不能添加一个像中心这样的简单命令?
花了几个小时试图弄清楚这一点,但仍然没有得到它。没有任何文档提到它。如果不手动重新排列所有内容,这是 rebol 无法做到的吗?
也许我只是期待太多?
编辑:好吧,我发现了一个 hack:indent num,然后 indent -num 在下一行。在这种语言的所有壮观特性中,为什么他们不能添加一个像中心这样的简单命令?
有一个 CENTER-FACE 功能可以重复使用来对齐面,但不幸的是,根据我的经验,它不能很好地工作。这是一个更简单的替换版本,应该可以解决问题:
center-face: func [face [object!] parent [object!]][
face/offset: parent/size - face/size / 2
]
这是一个使用示例:
lay: layout [
size 300x300
b: button "Hello World"
]
center-face b lay
view lay
首先,VID 不是 Rebol,而是作者 Carl Sassenrath 编写的演示方言,用于演示如何在 Rebol 中对接口进行方言。还有其他的,包括 RebGUI ( http://www.dobeash.com/rebgui.html ) 虽然我怀疑那里没有办法将按钮居中,因为两位作者都不认为这很重要。
您还可以使用 PAD 将光标靠近布局的中心对齐。
我们不能根据窗口本身来居中或对齐内容,因为控件没有任何方法可以引用它们的父面,直到父级调用了“SHOW”之后。
face/parent-face 直到显示父级才设置。因此,在普通 VID 中,您需要在初始布局和视图完成后调整 gui。
这是一个小脚本,它显示了在至少显示一次之后如何将任何面居中。
view/new 用于延迟事件处理,以便修改布局。
rebol []
center: func [face][
face/offset/x: (face/parent-face/size/x / 2) - (face/size/x / 2)
show face
]
view/new layout [
across
t: h1 "This is a centered title!"
return
button "1"
button "2"
button "3"
button "4"
]
center t
do-events