我有一个小面板的简单代码:
view [
t: text "label"
f: field
button "Click here" [t/text: f/text] ]
,但我必须将其中的两个放在一个窗口上。我想创建单个对象类,并从中创建2个对象。我看到可以创建对象如下:
obj: object [
view [
t: text "label"
f: field
button "Click here" [t/text: f/text] ] ]
view [
obj
obj ]
但是我会有以下错误:
*** Script Error: VID - invalid syntax at: [obj obj]
*** Where: do
*** Stack: view layout cause-error
如何完成?感谢您的帮助。
编辑:我尝试使用do
,但只能用does
进行管理:
myview: object [
show: does [view[
below
t: text "1st time"
f: field "Enter value"
button "Click here" [f/text "clicked"]
area] ] ]
myview/show
print "READY TO SHOW 2nd OBJECT: "
myview2: copy myview
myview2/show
我想创建单个对象类,并从中创建2个对象。
没有红色的对象类系统,因此在尝试更复杂的GUI结构之前,您应该真正尝试先掌握基本的红色概念。RED是一种非常灵活的面向数据的语言,因此您可以通过例如构建参数化块模板来利用它来发挥自己的优势,并组装它们以形成正确的VID代码块。这是一个示例:
make-row: func [label [string!] but-label [string!]][
compose [
t: text (label)
f: field
b: button (but-label) [face/extra/1/text: face/extra/2/text]
do [b/extra: reduce [t f]]
]
]
view compose [
(make-row "label" "Click") return
(make-row "label2" "Click2")
]
了解面部树(类似于HTML DOM,更简单),是掌握Red GUI系统的重要组成部分。由于还没有太多文档(您可以从http://docs.red-lang.org开始),欢迎您在红色/帮助吉特室问实时问题。
与对象一起工作而不是在 vid 方言中,用 layout
替换 view
:
lay: layout [
t: text "label"
f: field
button "Click here" [t/text: f/text]
]
view lay
您可以像其他任何对象一样检查它: ?? lay
。
例如,使用pane
访问lay
的内容:
>> ? lay/pane/1
但是,更有用的功能可能是dump-face
:
>> dump-face lay
Type: window Style: none Offset: 833x548 Size: 270x45 Text: "Red: untitled"
Type: text Style: text Offset: 10x10 Size: 80x24 Text: "label"
Type: field Style: field Offset: 100x10 Size: 80x24 Text: none
Type: button Style: button Offset: 190x9 Size: 70x25 Text: "Click here"
== make object! [
type: 'window
offset: 833x548
...
panel
s对将对象组合在一起很有用:
>> dump-face blay: layout [p: panel button "hi"]
Type: window Style: none Offset: none Size: 292x220 Text: none
Type: panel Style: panel Offset: 10x10 Size: 200x200 Text: none
Type: button Style: button Offset: 220x9 Size: 62x25 Text: "hi"
== make object! [
type: 'window
offset: none
...
,但使用compose
使用 vid 方言可能会更容易。
另请参阅此问题
我猜您正在寻找的是样式而不是对象,以创建布局。到目前为止,还没有红色的官方样式功能。但是您可以像这样动态创建布局
view repeat i 2 [
tname: to-word rejoin ['t i]
fname: to-word rejoin ['f i]
append v: [] compose/deep [
(to-set-word tname) text "label"
(to-set-word fname) field
button "click here" [
(to-set-path compose [(tname) text])
(to-path compose [(fname) text])
]
]
]
您可以多次将一个预定义单词块附加到要查看的块上,您将获得重复的元素。
txt_btn: [
t: text "label"
f: field
button "Click here" [t/text: f/text]
]
view append append [] txt_btn txt_btn
您参考块中的命名元素时会出现问题。但是,一个单词不能指出重复元素的一个以上元素,因此在完整解决方案中撰写以创建唯一的名称。
也许有一个红色的错误,因为我认为compose/deep
也会在内部深处进行括号,而不需要更多构成 -