hre is how I would do it...
there are two versions (one is commented):
# colorpicker controls solution
# imgtag controls solution
get it as an idea...
global PickColorRollout
/*
fn makeRollout dimX:8 dimY:4 =
(
ss_source = "rollout PickColorRollout \"Pick Color...\" width:191\n"
ss_source += "(\n"
ss_source += " local picked_control\n"
ss_source += " local picked_color\n"
ss_source += "\n"
ss_source += " fn applyColor control: value: =\n"
ss_source += " (\n"
ss_source += " format \"control: % value: %\\n\" control value\n"
ss_source += "\n"
ss_source += " picked_control = control\n"
ss_source += " picked_color = value\n"
ss_source += " )\n"
ss_source += "\n"
ss_source += "--CONTROLS--\n"
ss_source += ")\n"
bt_pos = [4,4]
bt_size = [21,22]
bt_spacing = [1,2]
cc_source = " colorpicker cp_xx fieldwidth:% height:% pos:(% + [%,%]) color:% modal:off\n"
cc_source += " on cp_xx changed val do applyColor control:cp_xx value:val\n"
cc = ""
for y=0 to dimY-1 do for x=0 to dimX-1 do
(
ss = stringstream ""
col = random white black
format cc_source bt_size.x bt_size.y bt_pos (x * (bt_size.x + bt_spacing.x)) (y * (bt_size.y + bt_spacing.y)) col to:ss
str = substitutestring ss "xx" (y as string + x as string)
append cc str
)
rol_str = substitutestring ss_source "--CONTROLS--" cc
execute rol_str
)
*/
fn makeRollout dimX:8 dimY:4 =
(
ss_source = "rollout PickColorRollout \"Pick Color...\" width:191\n"
ss_source += "(\n"
ss_source += " local picked_control\n"
ss_source += " local picked_color\n"
ss_source += "\n"
ss_source += " local white_bmp = bitmap 1 1 color:white\n"
ss_source += " local black_bmp = bitmap 1 1 color:(black + 1)\n"
ss_source += "\n"
ss_source += " fn applyColor control: value: =\n"
ss_source += " (\n"
ss_source += " format \"control: % value: %\\n\" control value\n"
ss_source += "\n"
ss_source += " cc = PickColorRollout.controls\n"
ss_source += " k = finditem cc picked_control\n"
ss_source += " if k > 0 do cc[k-1].bitmap = black_bmp\n"
ss_source += " k = finditem cc control\n"
ss_source += " if picked_control != undefined do control\n"
ss_source += " cc[k-1].bitmap = white_bmp\n"
ss_source += "\n"
ss_source += " c = getpixels control.bitmap [0,0] 1\n"
ss_source += " v = colorpickerdlg c[1] control.name\n"
ss_source += "\n"
ss_source += " if v != undefined do\n"
ss_source += " (\n"
ss_source += " setpixels control.bitmap [0,0] #(v)\n"
ss_source += " control.bitmap = control.bitmap\n"
ss_source += " )\n"
ss_source += " picked_control = control\n"
ss_source += " picked_color = v\n"
ss_source += " )\n"
ss_source += "\n"
ss_source += "--CONTROLS--\n"
ss_source += ")\n"
bt_pos = [8,5]
bt_size = [21,22]
bt_spacing = [1,2]
cc_source = " imgtag cp_xx_x width:% height:% pos:(% + [%,%]) bitmap:black_bmp enabled:off\n"
cc_source += " imgtag cp_xx width:(cp_xx_x.width-2) height:(cp_xx_x.height-2) pos:(cp_xx_x.pos + [1,1]) bitmap:(bitmap 1 1 color:%)\n"
cc_source += " on cp_xx mousedown do applyColor control:cp_xx value:val\n"
cc = ""
for y=0 to dimY-1 do for x=0 to dimX-1 do
(
ss = stringstream ""
col = random white black
format cc_source bt_size.x bt_size.y bt_pos (x * (bt_size.x + bt_spacing.x)) (y * (bt_size.y + bt_spacing.y)) col to:ss
str = substitutestring ss "xx" (y as string + x as string)
append cc str
)
rol_str = substitutestring ss_source "--CONTROLS--" cc
execute rol_str
)
try(destroydialog ::PickColorRollout) catch()
PickColorRollout = makeRollout dimX:8 dimY:8
createdialog PickColorRollout modal:on
format ">> control: % value: %\n" PickColorRollout.picked_control PickColorRollout.picked_color