Thread Rating:
  • 350 Vote(s) - 2.81 Average
  • 1
  • 2
  • 3
  • 4
  • 5
vboxのデータ追加について
10-16-2012, 10:41 AM,
#1
vboxのデータ追加について
今VBOXのデータ追加が一番上に追加する
例:

night (falseを追加) false
sun ---------------->     night
true                 sun
true
僕が 下記の効果が表示したい



night (falseを追加) night
sun ---------------->     sun
true                 true
false

どう書くが、教えてください。どうも。
Reply
10-18-2012, 10:53 AM,
#2
RE: vboxのデータ追加について
ご質問を理解しているかと自信がないままの回答になってしまいますが、
VBoxのaddメソッドは基本的に上から下へ順番に追加される仕組みですので、VBoxのある行の横に追加したい場合、その行のグラフィックオブジェクトをHBoxにし、そのHBoxにさらに追加すれば、一番下ではなく、HBoxのある行に追加されます。

{let hb:HBox = {HBox "night(falseを追加)", {Fill}}}
{let vb:VBox ={VBox}}

{vb.add hb}
{vb.add "sun"}

{hb.add "night"}

回答になったないかもしれませんが、レイアウトの調整は基本的に複数のコンテナオブジェクトの組み合わせで、簡単に出来るかと思います。

ちなみに、こちらの掲示板は複数言語対応できるようなので、ご質問は日本語、英語、中国語、韓国語のどれか使えば、回答する人が出てくると思います。
Reply
10-18-2012, 02:27 PM,
#3
RE: vboxのデータ追加について
ご目無さい。僕が中国人です。ここに中国語で質問を提出できますが?
Reply
10-18-2012, 02:51 PM,
#4
RE: vboxのデータ追加について
先试试看吧.看有没有回答用中文提出的问题.
事实上我是在读[Curlプログラミングバイブル]这本书里面发现的一段代码.

{define-enum public ColorList
red = "brick",
white = "off",
green = "forest",
black = "night",
yellow = "sun",
blue = "true",
orange = "fruit",
purple = "royal"
}

{let box:HBox = {HBox background = "silver"}}
{for color in ColorList do
{box.add {text color = color.name, {value color.value}}}
}
{value box}

得到的结果是这样

brick
off
forest
night
sun
true
fruit
royal

当我再追加一个字段Sad完整代码如下)

{define-enum public ColorList
red = "brick",
white = "off",
green = "forest",
black = "night",
yellow = "sun",
blue = "true",
orange = "fruit",
purple = "royal"
}

{let box:VBox = {VBox background = "silver"}}
{for color in ColorList do
{box.add {text color = color.name, {value color.value}}}
}

{box.add "true"}
{value box}

的时候,显示如下:

pink
brick
off
forest
night
sun
true
fruit
royal

我如果想让[pink]这个字段在最下面显示,应该如何写?



Reply
10-18-2012, 04:05 PM,
#5
RE: vboxのデータ追加について
如果你需要控制特定元素的显示顺序, 当然需要对这个元素进行额外的操作。
虽然我有点不适特别清楚你的意图,你看能否这样:
在for循环中跳过pink (其实我不知你说的pink在哪里, 你的例子代码中并没有pink元素, 我假定pink被加到enum的第一个位置), 待其他元素都追加完毕后,最后加上pink。


{define-enum public ColorList

pink = "pink",
red = "brick",
white = "off",
green = "forest",
black = "night",
yellow = "sun",
blue = "true",
orange = "fruit",
purple = "royal"
}

{let box:VBox = {VBox background = "silver"}}
{def a:{Array-of ColorList} = {{Array-of ColorList}}}
{for color in ColorList do
{if color == ColorList.pink then
{a.append color}
{popup-message "continue"}
{continue}
}

{box.add {text color = color.name, {value color.value}}}

}

{for c in a do
{box.add
{text color = c.name, {value c.value}}
}
}

{value box}
Reply
10-18-2012, 04:21 PM,
#6
RE: vboxのデータ追加について
另外,如果你最初的疑问是为何“false”被加到了vbox的前面, 我可以告诉你,这是Curl的设计,并非是bug。

我猜你的代码是放在一个applet中运行的,也就是*.curl或者*.dcurl, 位于代码top层的字符串都被当作显示对象输出到GUI,也就是applet的layout中。

而{VBox.add}方法有一个返回值,就是被add的对象, 当调用VBox.add时,它的返回值就被放到了top层代码,默认输出到了画面。
Curl的GUI还有一个约定,同一个Graphic对象的实例,同时只能显示在一个位置,而有多处参照时,最后评价(evaluate)的代码才有效。

此处false被放到了VBox的前面,是因为false先被追加入vbox, 后作为vbox的返回值被放到了applet的顶层,Curl的UI机制自动将其作为Graphic对象显示到画面, 而先运行的add处理(被追加进vbox)在反映到UI上时,false已经被从VBox中移动到了UI的顶层(实际也是一个Box)。
Reply
10-19-2012, 08:34 AM,
#7
RE: vboxのデータ追加について
非常感谢.尤其是最后一个回复,对我理解curl的运行方式有非常大的帮助.我确实不太理解为什么false被放到前面去.
Reply
10-19-2012, 09:25 AM,
#8
RE: vboxのデータ追加について
Curl的GUI功能非常强大,但有不少Curl特有的功能和其他GUI系统中不会有的特殊功能(Curl本身的一些专利),刚开始可能不易理解,如果习惯了就知道它的好处了,当然也不是所有的特色是好的 :)

像刚才的false被输出到VBox之前的问题,可以通过把add方法的调用放到一个{do } block中来解决,这样由于{do}语句不产生返回值, add的返回值就不会被传递到顶层graphic导致包含了false的text从VBox中消失。

Reply

Forum Jump:


Users browsing this thread:
1 Guest(s)

MyBB SQL Error

MyBB has experienced an internal SQL error and cannot continue.

SQL Error:
1017 - Can't find file: 'mybb_threadviews' (errno: 2)
Query:
INSERT INTO mybb_threadviews (tid) VALUES('641')