3

花了几个小时试图弄清楚这一点,但仍然没有得到它。没有任何文档提到它。如果不手动重新排列所有内容,这是 rebol 无法做到的吗?

也许我只是期待太多?

编辑:好吧,我发现了一个 hack:indent num,然后 indent -num 在下一行。在这种语言的所有壮观特性中,为什么他们不能添加一个像中心这样的简单命令?

4

3 回答 3

5

有一个 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
于 2013-01-30T19:08:25.887 回答
3

首先,VID 不是 Rebol,而是作者 Carl Sassenrath 编写的演示方言,用于演示如何在 Rebol 中对接口进行方言。还有其他的,包括 RebGUI ( http://www.dobeash.com/rebgui.html ) 虽然我怀疑那里没有办法将按钮居中,因为两位作者都不认为这很重要。

您还可以使用 PAD 将光标靠近布局的中心对齐。

于 2013-01-30T00:38:48.963 回答
3

我们不能根据窗口本身来居中或对齐内容,因为控件没有任何方法可以引用它们的父面,直到父级调用了“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
于 2013-02-02T16:41:24.643 回答