お気に入りの色に、DMonkeyを組み込んでみました。色をいじくる(反転色にするとか)項目を全部スクリプトに押し込んでしまおうという考えです。new Colors.R、new Colors.G、new Colors.Bとか言う感じ。最初バージョンアップしようとしてたときには、PPAでやろうとしていたっけ。まあ、この場合はPPAの方が都合がいいのかもしれませんが…。
DMonkeyの実装初体験でもあるわけですが、思った以上にすんなりできちゃって、ちょっとびっくりです(まあ、当然ですが)。
気づいたことも少々。組み込みオブジェクトですが、ヘルプのようにTJObjectのコンストラクタでRegistNameなんかしなくてもいいみたいですね、ちゃんとImportObjectで登録しておけば呼び出し可能みたいです。あと、メソッドはPublishedにしても、やっぱり登録しなくてはいけないようです。
あとは内部で例外をじゃんじゃん処理しているようなので(exceptで処理されるので、報告はされない例外を、たくさん発生させている)、そのソフトをデバッグ環境で使う場合はいちいちIDEに制御が移ってしまって面倒です。
Delphi@WCIMHで見つけた情報ですが、ExceptionClassをEAbortにしてやるといいようです。ブレークポイントのオプションも、ブレークさせなければ(停止条件にFalseと指定するなどして、ブレークで止めないようにしたとしても)無効みたいですからね。
var E: TClass; begin with TDMonkey.Create(Self) do try E := ExceptionClass; ExceptionClass := EAbort; try ImportObject('Colors', TColorCfg); CompileFile(ScriptDir + TMenuItem(Sender).Hint); Run([R, G, B]); finally ExceptionClass := E; end; finally Free; end; end;
あと、オブジェクト(この場合はColorsとか)の動作を反映させたいときは、そのクラスのデストラクタを使うといいようです。
えと…あと、staticなメソッドという概念は、DMonkeyにはないみたいですね、動的にならできるのかもしれませんが、基本的にstaticを目的とした関数しかなくても、newしてもらう必要がある…みたい?