Darkside(リンクエラー修正しました)

2018年9月14日(金) 21:46

問題はガワ

 既製品の Window が使い物にならないなら、勝手に CreateWindow してその中で編集すれば良いのでは?

 設定ウインドーが発生する際のイベントは、拡張編集でも発生する。その中で CreateWindow して表示や編集だ。
 しかし、概念は単純だが実装は容易ではない。ただでさえ、プラグインがプラグインを強引に呼び出している拡張編集である。それが更に別の Window を開いて中であれこれやるのだ。更に、拡張編集は複数可能。同じトーンカーブ調整プラグインが、同時に複数動作することもある。そんな編集やっていて、トラブルを発生させることなく動作できなければならない。

 トーンカーブ調整機能の中身は、既に完成している。やることは変わらない。つまり、ガワを作成できるかどうかが勝負だ。
 aviutl の実行寿命において1回ずつのみ実行される、DLL初期処理と DLL終了処理。その中で、RegisterClass と UnregisterClass を実行する。

 まずは、チェックボックス1つだけのプラグインを定義する。そして、フィルター実行関数の中でチェックボックスの値を確認し、1なら CreateWindow する。
 これが、一番良いタイミングで Window を生成できる。

 希望のタイミングで自動的に CreateWindow を実行させるためには、これしかない。他のイベントを使うと、余計なタイミングで実行されてしまう。
 しかし、チェックボックスは手動で外すこともできる。そのために、配慮すべき例外が増える。
 ならば、見た目は悪くなるがトラックバーはどうか。最大値と最小値がいずれも1というトラックバーを1つだけ定義すると、手動で値を変えることはできなくなる。

 これは、一見すると期待通りに動作する。ところが、中央のボタンを押すとアプリがハングアップする。無反応になる。このボタンは、トラックバーが定義されていると拡張編集プラグインが勝手に生成してしまう。
 1分ぐらい放置すると、操作可能になる。だが、これでは使い物にならない。

 止むを得ずチェックボックス1つのタイプを使用し、手動でチェックが外されるなど嫌な場合はどうリカバーするかを考える。しかし、どんな操作でもトラブルが起きないかどうかを確認するのは容易ではない。
 トラックバーを持った他スクリプトと併用すると、他スクリプトに存在するボタンを押したときにアウト。やはり1分ぐらい応答なしになってしまう。

 つまり、チェックボックス化では回避できない。トラックバーのボタンを押しても問題ないような実装を行わねばならない。果たして、それは可能なのだろうか?
 だが、可能でさえあればトーンカープ調整プラグインでもトラックバーが使えるから、チェックマークが手動で外される問題も同時に解決する。

written by higashino [カメラ] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

Comments

TrackBacks

Darkside(リンクエラー修正しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4