UWSCの標準関数をオーバーロードする

MODULEを使う。
以上終了、、、なんだけど、一応例を。



例えば

MSGBOXをオーバーロードしたいとしよう。
スクリプト

	MSGBOX("test!", BTN_IGNORE)


MSGBOXをオーバーロードして、全てのメッセージに時刻をつけたいとする。

最初に、MODULEとPROCEDURE(またはFUNCTION)で囲み関数にする

MODULE名/関数名は適当

MODULE Main
PROCEDURE Run()

	MSGBOX("test!", BTN_IGNORE)

FEND
ENDMODULE
MODULEの前でその関数を呼び出す
Main.Run()

MODULE Main
PROCEDURE Run()

	MSGBOX("test!", BTN_IGNORE)

FEND
ENDMODULE
MODULEにオーバーライドする関数を書く

この関数内で期待動作に変更する。

Main.Run()

MODULE Main
PROCEDURE Run()

	MSGBOX("test!", BTN_IGNORE)

FEND

FUNCTION MSGBOX(msg, btn=BTN_OK)
	GETTIME()
	RESULT = Global.MSGBOX(G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2 + "<#CR><#CR>" + msg, btn)
FEND
ENDMODULE

なお、オーバーライドする関数内で元の関数を呼び出す場合は、「Global.」をつける。
以上である。

何これ?

以前、MOUSEORG中の座標関係がなんとかならんか、とか言う質問があった。
それを思い出したので、頭の体操代わりに解決方法を考えてみた次第。
これなら、元のスクリプトはほとんど変更せずに、動作を変えられる。


なお、Main.Run関数内にCALLを書いても期待動作しません。
多分、名前空間が別。