2006/01/10(火)からふるおぶじぇモジュール
カラフルメッセージボックスの改良版です。
HSPのオブジェクトに色を付けることができます。
オブジェクトごとに別の色を指定できます。
HSP2版で対応していたボタンの色変えについては今のところ対応していません。
誰かに付けてって言われたら付けるかもしれません。
このモジュールはスクリプトに組み込んで自由に使用できます。
#module
;// からふるおぶじぇくとLite HSP3移植版
#define MAXOBJ 256
;// オブジェクト最大数 (全ウィンドウ合計)
;// 登録したオブジェクトの数だけGDIの論理ブラシを作るので、
;// (システムリソースを食う) あんまり大きくしすぎない方向で。
;// cls 命令などでオブジェクトをクリアしたらその後 objcolorcls命令も実行して、
;// オブジェクトの登録を解除してあげてください。
;// ps.コンボボックスは2個食います。
#uselib "gdi32.dll"
#func SetBkColor "SetBkColor" int,int
#func SetTextColor "SetTextColor" int,int
#func CreateSolidBrush "CreateSolidBrush" int
#func DeleteObject "DeleteObject" int
#uselib "user32.dll"
#func InvalidateRect "InvalidateRect" int,int,int
#func GetClassName "GetClassNameA" int,var,int
#func GetComboBoxInfo "GetComboBoxInfo" int,var
#define WM_CTLCOLOREDIT 0x0133
#define WM_CTLCOLORLISTBOX 0x0134
#define WM_CTLCOLORSTATIC 0x0138
#define global ctype crgb(%1,%2,%3) (((%1&$FF)<<16)|((%2&$FF)<<8)|(%3&$FF))
#define ctype crgb2colorref(%1) (((%1>>16)&$FF)|(%1&$FF00)|((%1&$FF)<<16))
*colorfulmsgboxproc
_id = -1
repeat MAXOBJ
if hWndObj.cnt == lParam : _id = cnt:break
loop
if _id = -1 : return 0
SetTextColor wParam, txcolor._id
SetBkColor wParam, bkcolor._id
return hBrush._id
#deffunc _objcolor_search_objid int _hObj
_id = -1
repeat MAXOBJ
if hWndObj.cnt == _hObj : _id = cnt : break
loop
if _id != -1 : return _id
repeat MAXOBJ
if hWndObj.cnt == 0 : _id = cnt : break
loop
return _id
#deffunc _objcolor_add int hObj,int bkcl,int txcl,int wid
if hObj = 0 : return
_objcolor_search_objid hObj : id = stat
if id=-1 : dialog "オブジェクト数が"+MAXOBJ+"を超えました。" : end
if hWndObj.id : DeleteObject hBrush.id
hWndObj.id = hObj
CreateSolidBrush bkcl : hBrush.id = stat
bkcolor.id = bkcl
txcolor.id = txcl
objwinid.id = wid
return
#deffunc _objcolor_del int hObj
if hObj = 0 : return
_objcolor_search_objid hObj: id = stat
if id = -1 : return
if hWndObj.id : DeleteObject hBrush.id
hWndObj.id = 0
return
#deffunc _clmesbox_init_
dim hWndObj,MAXOBJ
dim objwinid,MAXOBJ
dim hBrush,MAXOBJ
dim bkcolor,MAXOBJ
dim txcolor,MAXOBJ
return
#deffunc objcolorscreen
oncmd gosub *colorfulmsgboxproc,WM_CTLCOLOREDIT
oncmd gosub *colorfulmsgboxproc,WM_CTLCOLORLISTBOX
oncmd gosub *colorfulmsgboxproc,WM_CTLCOLORSTATIC
return
#deffunc objcolorcls
repeat MAXOBJ
if hWndObj.cnt = 0 : continue
if objwinid.cnt = ginfo_sel : _objcolor_del hWndObj.cnt
loop
return
#deffunc objcolor int objid, int _bkcl, int _txcl
bkcl = crgb2colorref(_bkcl)
txcl = crgb2colorref(_txcl)
_objcolor_add objinfo(objid,2),bkcl,txcl, ginfo_sel
sdim classname,64
GetClassName objinfo(objid,2),classname,64
if ClassName="ComboBox" {
dim comboboxinfo,20:comboboxinfo=52
GetComboBoxInfo objinfo(objid,2),comboboxinfo
_objcolor_add comboboxinfo.12 ,bkcl,txcl,ginfo_sel
}
InvalidateRect objinfo(objid,2), 1
return
#deffunc ColorfulMesbox2 int objid, array c
objcolor objid, crgb(c.0,c.1,c.2), crgb(c.3,c.4,c.5)
return
#global
_clmesbox_init_
;//////// モジュールここまで ////////
#if 1 ;// サンプルここから 1 にすると実行
objcolorscreen
;// 操作先のウィンドウでオブジェクトの色をかえられるようにする。
sdim teststr,1024
teststr = "からふるおぶじぇくと Lite HSP3移植版\\n"
teststr+= "オブジェクトごとに\\n色をかえられます♪"
sdim buf,1024 : buf = teststr
color $CC,$CC,$CC : boxf
;// HSP2 の objmode +32 みたいに、枠を消せると綺麗なんだけどねぇ。
objmode 1 : objsize 600,20
pos 20,0
;// オブジェクトIDと色の入った配列変数で作成。
pos , ginfo_cy+20 : mesbox buf,,90,1
col = $FF,$ee,$ee, $AA,$33,$44
ColorfulMesbox2 stat,col ;// オブジェクト情報を登録
;// crgbマクロ(COLORREF)による色の指定。
pos , ginfo_cy+20 : mesbox buf,,90,1
;// オブジェクト情報を登録 ( ColorfulMesbox2 の実値版 )
objcolor stat, crgb($FF,$FF,$ee), crgb($AA,$33,$44)
;// インプットボックス 単に $RRGGBB でも○
buf = strmid(teststr,0,instr(teststr,0,"\\n")) + " - これは input 入力ボックス 抹茶味(?)"
pos , ginfo_cy+20 : input buf
objcolor stat, $eeFFee, $008040
;// 書き換え不可。
buf = teststr+"\\n\\nこれは書き換え不可エディットボックスです。"
pos , ginfo_cy+20 : mesbox buf,,90,0
objcolor stat, crgb($ee,$FF,$FF), crgb($33,$44,$cc)
;// チェックボックスもおっけー
pos , ginfo_cy+20 : chkbox strmid(teststr,0,instr(teststr,0,"\\n"))+ " - これは チェックボックス" ,a
objcolor stat, crgb($ee,$ee,$FF), crgb($44,$33,$AA)
;// コンボボックス
buf = teststr + "\\n\\nこれはみてのとおり\\nコンボボックスです。"
pos , ginfo_cy+20 : combox a,300,buf
objcolor stat,$FFeeFF,$AA3344
stop
#endif