Photoshop Extensionの開発33 プログレスバー

javascript, Photoshop

前回よりjsxでのGUIの作り方からプログレスバーの作り方を載せていきます。

jsxの進捗率をリアルタイムで監視するためにはjsxでGUI上にプログレスバーを表示させて処理が終わるまで更新させていきます。まずプログレスバーを表示させる方法は簡単で前回のようにダイアログのオブジェクトにプロパティーで追加します。

プログレスバーの引数は第一引数からprogressbar(ダイアログのパーツの種類)、バーの大きさ、バーの初期値の値、バーの最大値の値になっています。バーの初期値が0の場合真っ黒なバーが画面に表示されます。それでjsxの進捗をバーに反映させる方法ですがプログレスバーのプロパティーに値を代入する事で進捗を更新できます。具体的には

winObj.p.value

これをfor文で更新させると

ダイアログのOKボタンを押すとプログレスバーの更新が始まります。各インクリメント事に100分の秒だけ静止させる事によりバーが徐々に伸びゆくのを確認できます。それでこのプログレスバーなのですが結論からいうと実はmac版PhotoshopCC2017,2019だと進捗が反映されませんでした。(MAC OS ver 10.14.5)for文の間にアラートを挟むと一度更新が確認できるのですが処理の間に何度もアラートを挟むなど勿論問題外なのでどうにも解決できませんでした。最初ダイアログがアクティブになっていないのが問題かとも思ったのでwinObj.activeにtrueを代入する事でダイアログをアクティブな状態にしたのですが解決しませんでした。ちなみにmac版illustratorCC2019では進捗を確認できたので(上記のコードはillustratorでも動きます。)バグの可能性もあるかもしれません。その他英語版Adobe forumsを覗くとinDeisgn等のアプリケーションでも色々問題に遭遇しているユーザーが多いので念のためwinObj.active、winObj.updateといったメソッドは使用した方が良いとは思います。このjsxでのGUIはOS、バージョン等の差異が大きいので使用する場合は慎重にした方が良いかもしれません。

アラートを挟んだ場合

アラートを出すとmac OSでもプログレスバーが表示される。

Beer 寄付してサイトを応援する。