5

Pharo 1.4 summer でのテスト。スクリーンショットを使用して説明する方がよいと思います。コードは以下のとおりです。

これは私の初期状態です (私のコードで今得ているもの):

初期状態

次のように、グループ ボックス モーフを開いたときに水平方向に塗りつぶします。

初期の望ましい状態

サイズ変更後、グループ ボックスのモーフが境界を維持するようにします。つまり、次のようになります。

目的の状態のサイズを変更

これは私が試したコードです:

| s morph1 morph2 row groupBox scroller |
s := ScrollPane new.
morph1 := BorderedMorph new.
morph2 := BorderedMorph new.
row := UITheme builder newRow: {morph1 . morph2}.
groupBox := UITheme builder newGroupbox: 'Group Box Test' for: row.
    groupBox 
        layoutFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 0.8));
        vResizing: #spaceFill;
        hResizing: #spaceFill;
        layoutChanged.
scroller := s scroller.
scroller 
    addMorph: (groupBox position: 0@0)
    fullFrame: (0 @ 0 corner: 0.8@0.5).
s scroller color: Color white.
s
 extent: 250@150;
 openCenteredInWorld

コンテナーは ScrollPane でなければなりません。

ポリモーフ UIBuilder を使用しないように Bert のコードを調整した結果、次のようになりました。

morph1 := Morph new.
morph2 := Morph new.
row := ScrollPane new.
row
    color: Color white; borderColor: Color gray; borderWidth: 1;
    layoutPolicy: ProportionalLayout new.
row scroller
    addMorph: morph1 fullFrame: (LayoutFrame fractions: (0@0 corner: 1@0) offsets: (5@5 corner: -60@45));
    addMorph: morph2 fullFrame: (LayoutFrame fractions: (1@0 corner: 1@0) offsets: (-50@5 corner: -5@45)).
row
    extent: 250@150;
    openInHand

内側の青いモーフが重なっていて、指定されたフレームを埋めていないため、機能しません。フレームを使用して多くの組み合わせを試しましたが、これまでのところ何も機能しませんでした。私が欠けているものを知っていますか?

4

2 に答える 2

3

UIBuilderを使用すると、手動でスクローラーを作成する必要はありません。垂直または水平のスクロールバーが自動的に表示されるまでサイズを変更して、次のスクリプトを確認します。

| dialog morphList row morph1 morph2 morph3 morph4 |

morph1 := BorderedMorph new hResizing: #spaceFill.
morph2 := BorderedMorph new.
morph3 := BorderedMorph new.
morph4 := BorderedMorph new.
row := UITheme builder newRow: {morph1 . morph2 . morph3}.
morphList := UITheme builder 
    newMorphListFor: (ListModel new list: {row . morph4})
    list: #list 
    getSelected: #selectionIndex 
    setSelected: #selectionIndex:
    help: 'This is a morph list'.
dialog := UITheme builder newWindowFor: nil title: 'titleString'.
dialog addMorph: morphList fullFrame: (LayoutFrame fractions: (0@0 corner: 1@0.5)).
dialog openInWorld
于 2013-01-29T11:04:39.540 に答える
2

ProportionalLayout が #spaceFill などを使用しないことを見逃しています。そのため、TableLayout を使用します。

morph1 := Morph new hResizing: #spaceFill.
morph2 := Morph new.
row := Morph new
    color: Color white; borderColor: Color gray; borderWidth: 1;
    layoutPolicy: TableLayout new;
    layoutInset: 5; cellInset: 5;
    listDirection: #leftToRight;
    addAllMorphs: {morph1. morph2};
    extent: 250@150;
    openInHand

または、オフセットのある ProportionalLayout を使用すると、固定幅と相対寸法を混在させることができます。

morph1 := Morph new.
morph2 := Morph new.
row := Morph new
    color: Color white; borderColor: Color gray; borderWidth: 1;
    layoutPolicy: ProportionalLayout new;
    addMorph: morph1 fullFrame: (LayoutFrame fractions: (0@0 corner: 1@0) offsets: (5@5 corner: -60@45));
    addMorph: morph2 fullFrame: (LayoutFrame fractions: (1@0 corner: 1@0) offsets: (-50@5 corner: -5@45));
    extent: 250@150;
    openInHand

UITheme を持たない Squeak でこれを試したので、これは Morphs を直接使用しています。

于 2013-01-24T20:27:47.173 に答える