如何将视图转换为红色的窗格或面板

How to Convert a view into a Pane or Panel in Red

所以我有一个当前正在运行并且看起来像我想要的视图。我想做的是将它包含的内容包装在一个变量中,并将其放在一个选项卡面板中。为此,我相信我需要将其转换为面板或类似面板。但我不太确定如何。

这是风景,

        Red [ Title: "Editor"  needs: 'view]

        s: 110x25
        ts: 50x50

        view [size 800x800 title "Red Edit"

        drop-down s "Debug" data ["Debug" "Release"] 
        drop-down s "Windows" data ["Windows" "MacOSX" "Linux" "BSD" ] 
        button s "Compile" []  across
        button s  "Run" []


         return
            a: area 700x700 black
        ]

这是选项卡面板

       view [backdrop brown
            title "Red Edit"
            tab-panel 820x820 [
                  "File1" []

                              ]
        ]

它将进入第一个名为 "File1" 的选项卡。 到目前为止,我的尝试给了我一个编译器错误,告诉我我试图创建的面板没有价值。

此外,由于我仍在学习 red,因此也非常感谢有关语法和编码风格的提示。

更新:这是我想将它们结合起来的方式:

    Red [ Title: "Editor"  needs: 'view]
    s: 110x25
    ts: 50x50

    p: [size 800x800 title "Red Edit"

    drop-down s "Debug" data ["Debug" "Release"] 
    drop-down s "Windows" data ["Windows" "MacOSX" "Linux" "BSD" ] 
    button s "Compile" []  across
    button s  "Run" []


     return
        a: area 700x700 black
    ]



    view [backdrop brown
    title "Red Edit"

    tab-panel 820x820 [
        "File1" [text "hello" p]

                                  ]
    ]

如果我这样做,p 永远不会显示。

如果我要猜测你的意图,我认为你真正的问题是:

如何将 GUI 内容组合在一起?

有几种方法可以做到这一点,但您首先要问的是:

我需要吗?

正如@dockimbel 所说,如果它不是动态的,您可以在方言块 [] 内的 tab-panel 单词之后简单地使用它,这是惯用的:

tab-panel [<rest of gui here>]

方法一:用

组成方言

这是下一个最简单的方法,使用您的代码:

Red [ Title: "Editor"  needs: 'view]

s: 80x25
ts: 50x50

cnt-object: layout cnt-view-dialect-blk: [
    ;size 80x80 title "Red Edit"
    drop-down s "Debug" data ["Debug" "Release"] 
    drop-down s "Windows" data ["Windows" "MacOSX" "Linux" "BSD" ] 
    button s "Compile" []

    ;across
    button s  "Run" []

    return
    a: area 350x150 black
]

; view cnt-object

pnl-object: layout pnl-view-dialect-blk: compose/deep [
    title "Red Edit"
    tab-panel 400x200 [
        "File1" [(cnt-view-dialect-blk)]
    ]
]

view pnl-object

方法二:使用视图face!对象

这需要更陡峭的学习曲线,但是当您学习它时,一切都会变得容易得多,而且可能也更有效率!如果您阅读 face! 的文档:

button: make face! [type: 'button]

然后回头看看我在上面的代码中命名为 -object 的内容,您会发现它们在概念上是相同的。也就是说,用 make.

创建的 object!

如果您这样做,最有用的事情之一是 /pane/parent 来上下移动层次结构

进一步考虑

视图不是表面上显示的 "thing"。它可能指的是 VID dialect(你在 [blocks] 中的内容),或 view function 用于在视图引擎中显示内容。实际的东西是 face! 个对象,用 makelayout 函数手动创建。

我标注了-view-dialect-blk,是用实景方言写的,概念上和实物是不一样的。如果你检查我用 ?? 标记的所有内容,我想你会更接近于理解引擎盖下的一切工作原理;-)

阅读 rebol2 view concepts and the official documentation 直到 red 赶上它也很好。虽然略有不同,但概念是一样的