これを応用してRECT構造体などの各メンバへのアクセスもマクロ化できるのでは?と予想を立てています。
とりあえずwith文で遊んでみてください。
そして気に入ればuserdef.asに書き込んでデフォルトで使用できるようにしましょう。
本家with文とは多少異なりますが、用途はこれで十分かと。
// With - EndWith // %twith %s1 ... 引数パラメータ(変数名)をスタックに積む #define global with(%1) %twith %s1 // %twith %p ... スタックに詰まれた一番上(身近なwith文)の変数名に置き換えられる #define global this %twith %p // %twith %o0 ... スタックから変数名を下ろす #define global endwith %twith %o0
マクロの色分けがされないので通常の変数と混同しないように注意したいです。
以下サンプル(with文を定義してください)
#include "user32.as" // もっとも単純なサンプル with varname this = 5 mes this endwith // ネストも可能なサンプル with nest1 this = "ネスト1です" with nest2 this = "ネスト2です" endwith endwith mes nest1 mes nest2 // 配列も指定できるサンプル dim array, 5 with array foreach this this.cnt = cnt loop endwith foreach array mes array.cnt loop // 最も感謝されるサンプル screen 1: objsize 200 button gosub "別ウィンドウで再生", *copy button gosub "クリア", *clear with MouseCursorPoint_by_ClientCoordinates ; 分かりやすいけどタイプするのが大変…@@; dim this, 2 ; x,y repeat wait 1 this.0.cnt = mousex: this.1.cnt = mousey line this.0.cnt, this.1.cnt loop *clear dim this, 2 ; 初期化 color 255,255,255: boxf: color 0 pos 0, 0 return *copy screen 2 repeat length2(this) wait 1 line this.0.cnt, this.1.cnt loop gsel 1 return endwith