0

ユーザーがこのコードで画像のダウンロードの進行状況に関する情報を取得できるように、PharoLauncher に進行状況バーを提供しました。

PharoLauncher>>displayProgress:during: (in category 'template action') -----

displayProgress: label during: workBlock
    | nextUpdateTime |
    nextUpdateTime := 0.
    ^UIManager default displayProgress: label 
        from: 0.0 to: 1.0 during:[:bar|
            [workBlock value] on: HTTPProgress do:[:ex|
                (ex total == nil or: [ex amount == nil]) ifFalse:[
                    (nextUpdateTime < Time millisecondClockValue 
                        or:[ex total = ex amount]) ifTrue:[
                            bar current: ex amount asFloat / ex total asFloat.
                            nextUpdateTime := Time millisecondClockValue + 100.
                    ].
                ].
                ex resume.
            ]
        ]

したがって、メッセージは UIManager のデフォルトの displayProgress: from: to: during: です。これで問題なく動作しますが、モーフを中央に配置して、ユーザーが見やすいようにし、大幅にスケーリングして、はるかに簡単に実行できるようにしたいと考えています。 . そのためには、プログレス バーのコンテナーとして機能する Morph を見つけて、全体を拡大する必要があります。

問題は、このメッセージの階層を閲覧しようとすると、行き止まりにぶつかることです。

displayProgress: titleString from: minVal to: maxVal during: workBlock
    "SystemProgressMorph show: titleString from: minVal to:  during: "

    ^ workBlock asJob
            title: titleString;
            min: minVal;
            max: maxVal;
            run. 

問題は、 Job クラスに移動すると、予想どおり、モーフがどこにも見つからないことです。では、モーフを見つける方法と、そのすべてのサブモーフを含むモーフを配置およびスケーリングする方法を教えてください。

4

1 に答える 1

2

Pharo-dev メーリング リストの Thierry Goubier と freenode の #Pharo の tinchodias の助けを借りて、解決策を見つけました。

作成された 3 つのアナウンサーがあり、これら 3 つのアナウンスはクラス JobStart 、JobEnd、JobChange クラスに関連付けられており、SystemProgressMorph のクラス メソッド startJb: endJob: および updateJob: をトリガーします。SystemProgressMorph のインスタンスは 1 つしか存在できません。そのインスタンスをキャプチャするには、uniqueInstance クラス メソッドを使用します。

プログレスバーの位置とサイズを変更するために、次のカスケードメッセージを使用しました

(SystemProgressMorph uniqueInstance) minWidth: 600; 
                                     minHeight: 50; 
                                     layoutInset: 30@20; 
                                     position: 150@200.

layoutInset は、SystemProgressBarMorph 内にプログレス バー用のスペースを追加します。他の pharo アプリで使用されるプログレス バーに影響を与えないように、これらの値をリセットすることをお勧めしますが、PharoLauncher は必要のない独立したイメージに含まれているためです。

于 2014-09-08T10:49:11.803 に答える