実は、配列だけ解っても足りない気がしてきたので追記。
プログラミングマニュアルにはこんなことも書いてあります。
それぞれのオブジェクトには、オブジェクトIDという番号が割り振られ管理されています。 オブジェクトIDは、0から始まる整数値で、配置命令の実行後にシステム変数statに 代入されます。通常は、画面内に配置した順に自動的に0,1,2,3…と数値が割り振られます。
オブジェクトIDが必要な時は、オブジェクトの一部を後から消したい時、状態を変更したい 時などです。また、押しボタンが押された時には、システム変数statに押されたボタンの オブジェクトIDが代入されます。
※button命令のヘルプには後者しか書いてないのです。
※配置したらstatが変化するオブジェクトの配置命令のヘルプには全部書いてあってもいいと思うんですが。常々。
すると、元のスクリプトの Weeks 配列でやっているようなことを、色やボタンの文字列でもできるようになります。
screen 0,250,500
gsel 0,4
title "超簡易時計"
pos 30,0
mes "どの背景にしますか?"
pos 85,20
dim object_id, 8
btnstr ="Black","Blue","Green","Cyan","Red","Magenta","Yellow","Gray"
back_r = 0, 0, 0, 0,255,255,255,192
back_g = 0, 0,255,255, 0, 0,255,192
back_b = 0,255, 0,255, 0,255, 0,192
repeat 8
button btnstr(cnt), *ON_PUSHED_BUTTON
object_id(cnt) = stat
loop
stop
*ON_PUSHED_BUTTON
pushed_object_id = stat
repeat 8
if(object_id(cnt)==pushed_object_id) {
color_idx = cnt
break
}
loop
screen 0,650,70
font "MS ゴシック",28
Weeks = "日", "月", "火", "水", "木", "金", "土"
*DRAW_CLOCK
year=gettime(0)
month=gettime(1)
week=Weeks(gettime(2))
day=gettime(3)
hour=gettime(4)
minute=gettime(5)
second=gettime(6)
redraw 0
color back_r(color_idx),back_g(color_idx),back_b(color_idx)
boxf
color 255,255,255
pos 0,0
mes "只今の時刻は"+year+"年"+month+"月"+week+"曜日"+day+"日"+hour+"時"+minute+"分"+second+"秒です"
redraw 1
await 1000
goto *DRAW_CLOCK
前の変更よりちょっとややこしいところがありますね。
ボタンを押した後、ボタンのオブジェクトIDから色情報のインデックス(back_r,back_g,back_bの添え字に使う数値)を検索しています。
ボタンを配置したときのstat(=オブジェクトID)と、押されたボタンのオブジェクトIDが一致するボタンを探しているわけです。
こうなると、もういくらでも好き放題ボタンが増やせそうです。