2012-11-09 89 views
0

我在Smalltalk中编写RSSReader,所以我有两个Model类:RSSModel(标题,条目)和EntryModel(标题,图像,内容,日期)如何使用VisualWorks中的滚动条垂直排列视图?

我有EntryView的列表(从UI.View继承)现在我有RSSView我displayOn方法会垂直各差距显示的条目:和结果

| dy iView gap | 
     gap := 5. 
     dy := 0. 
     1 to: model entries size 
      do: 
       [:i | 
       iView := EntryView model: (model entries at: i). 
       iView displayOn: aGC at: 0 @ dy. 
       dy := dy + 89 + gap] 

是:

result

我不知道如果我这样做是正确的WA如果你有更好的解决方案来显示RSSView请告诉我。

问题:

  1. 如何获得项目的高度?现在我写dy:=dy+89+gap其中89是硬编码高度的条目。
  2. 如何启用滚动条在窗口中滚动条目?

回答

1

如何获取条目的高度?用途:

"entry bounds height" 

如何启用滚动条?

要回答这个问题,我首先要指出的是,显示EntryView的方式并不是最好的方法。你想创建一个自定义控件,就像我在其他问题How to create a window in smalltalk中解释的那样。您可以使用CompositeView作为视图,并使用add:at:将每个EntryView添加到组合中。

一旦你有了,你可以去视图的UIPainter属性编辑器中的详细信息选项卡,并打开垂直滚动条。

+0

但是,如果我得到了入口界限高度,它会返回我的系统屏幕高度,为什么? – borovsky

+1

为您的EntryView实现preferredBounds。查看其他实现的示例。 –

+0

虽然有效但存在渲染问题: 新打开的窗口看起来像图片: http://scr.hu/108/358z2 但是当滚动条目来自不可见部分时,它看起来像这样: http:///scr.hu/108/1x7r6 可能是什么问题? – borovsky