ISFUNCとEVALの合わせ技が本来だが、いちいちその2つを並べて書くのは面倒だし、特に、呼び出した関数に何か引数を渡したい場合、さらに面倒になる。
ので、その辺をひとまとめにした、CallFunctionと言うものを作ってみた。
CallFunction
{ //------------------------------------------------------------------------------
// 存在するかどうか分からない関数を呼び出す。
// ISFUNC→EVALの流れをひとまとめにしたもの。
//------------------------------------------------------------------------------
_Function = _argv[0];
_Value = _argv[1,_argc-1];
_Function_EVAL = _Function;
//引数が指定されていたら引数をセットする
if (ARRAYSIZE(_Value) > 0) { _Function_EVAL = "%(_Function)(%(CHR(0x22))%(_Value)%(CHR(0x22)))"; }
//指定された関数を呼び出す
if (ISFUNC(_Function)){ EVAL(_Function_EVAL); }
}
使い方は、
CallFunction(呼び出したい関数名[,その関数に渡す引数])
その関数に渡す引数、は、引数が必要ない場合は省略可能。
CallFunctionの使用例
OnAnchorSelect
{ //------------------------------------------------------------------------------
// アンカーがクリックされたときの処理(URLジャンプなど)
// AYAYA03の、Tips→アンカータグからURLジャンプ、より。
// https://emily.shillest.net/ayaya/?cmd=read&page=Tips%2F%E3%82%A2%E3%83%B3%E3%82%AB%E3%83%BC%E3%82%BF%E3%82%B0%E3%81%8B%E3%82%89URL%E3%82%B8%E3%83%A3%E3%83%B3%E3%83%97&word=OnAnchorSelect
//------------------------------------------------------------------------------
_id = reference[0];
// アンカーのIDの冒頭に「http://~」があればWebサイトを開く。
if (RE_MATCH(_id, '(http|https|ftp)://(.+)')) {
_url = EscapeText(_id);
"\C\j[%(_url)] \e";
// それ以外はIDと同じ名前のイベントへジャンプ
} else {
CallFunction('_id')
}
}
MouseCounter
{ //------------------------------------------------------------------------------
// マウス操作の捕捉。引数に'Wheel'を指定するとホイール反応
//------------------------------------------------------------------------------
_PreviousArea = PreviousArea_Move; //直前のエリア
_PreviousTime = PreviousTime_Move; //直前の時刻
_Stroke = Stroke_Move; //ストローク数
_Threshold = 64; //反応しきい値
_TYPE = _argv[0]; //ホイールかそれ以外か
_Scope = reference[3]; //マウスイベントが発生しているスコープ
_Area = reference[4]; //マウスイベントが発生しているエリア
if (_TYPE == 'Wheel') {
//ホイール操作に対する反応
_PreviousArea = PreviousArea_Wheel; //直前のエリア
_PreviousTime = PreviousTime_Wheel; //直前の時刻
_Stroke = Stroke_Wheel; //ストローク数
_Threshold = 2; //反応しきい値
}
if ((_Area != '')||(_Scope == 1)) {
//どこかが撫でられている
if (_Area == _PreviousArea) {
_Interval = systemuptime - _PreviousTime;
if (_Interval > 1) {
//1秒以上間隔が空いたらカウンタをリセット
_Stroke = 0;マウス反応中 = 0;
}
//現在時刻を取得
_PreviousTime = systemuptime;
_Stroke++;
//触られた量が閾値を超えたら「触られている」と判断
if (_Stroke > _Threshold) {
//触られた
if (!マウス反応中) {
//既に反応中でなければ、触られた部位を見てトークする
マウス反応中 = 1;
'\t' + CallFunction('MouseReaction',_TYPE);
以下省略
コメントを残す