こんな感じでWPFのUIを独自に作成し
スクリプト上のオブジェクトを紐づけて呼べるように拡張しました。
出来たモジュールをAddonフォルダに入れとくと機能追加されます。
public class ScriptUIButton : ScriptUIBase<Button>
{
public override string this[string key]
{
get
{
switch (key)
{
case "Text":
{
if (UI.Content == null)
return "";
return UI.Content.ToString();
}
}
return "";
}
set
{
switch (key)
{
case "Text":
UI.Content = value;
break;
}
}
}
public override void Init(IScriptUILib script)
{
UI.MinWidth = 16;
UI.MinHeight = 16;
UI.Foreground = System.Windows.Media.Brushes.Black;
UI.Click += (s, e) =>
{
script.Excecute(this,"this.onClick()");
};
}
}
var button = ScriptPanel.appendline("button", { Text: "ボタン" });
button.onClick = function () {
alert("click");
}
ScriptPanel.appendline(“button”, { Text: “ボタン” });
でbuttonとScriptUIButtonが紐づいているのは
ScriptUI*でクラス名を取得して小文字で登録してるからです。
ルール外のクラスは登録されません。
サンプルはScritUIBaseという抽象クラスからの派生となっていますが
実際のとこは以下のinterfaceを持つクラスで取得しているのでScritUIBaseからの派生である必要はないです。
/// <summary>
/// IScriptUIのInit時に渡される
/// Excecuteにより対応するスクリプト側のUIオブジェクトの関数を呼び出す事ができる
/// </summary>
public interface IScriptUILib
{
string FileName { get; }
string Description { get; }
string Namespace { get; }
string Name { get; }
bool IsEnable { get; set; }
void Excecute(IScriptUI ui,string call);
}
/// <summary>
/// ScriptUI* 名でクラスを定義する
/// 例:ScriptUIButtonならbutton名で実体化する
/// </summary>
public interface IScriptUI
{
int UIID { get; set; }
UIElement ScriptUI { get; }
/// <summary>
/// UIパラメータの設定と取得ができる
/// </summary>
/// <param name="key">UIのパラメータ名</param>
/// <returns>Script側のget(key)にて取得できる値</returns>
string this[string key] { get; set; }
/// <summary>
/// この関数内でUIのイベント等をスクリプトと関連付ける、UIの初期値を設定する等行う
/// UI生成後呼ばれる
/// </summary>
/// <param name="script">スクリプト情報 ExcecuteによりScript側の関数を実行する</param>
void Init(IScriptUILib script);
}
Capture機能をScriptに追加しました。
var rect=Capture.getrect();//キャプチャ位置の取得
Capture.setrect(rect);//キャプチャ位置の設定
Capture.shot();//一枚画像の取り込み
ここでrectは
{X:,Y:,W:,H:}
となります。
これらを利用したスクリプトを追加しました。
WebCapture