colorfulobject.as [からふるおぶじぇくとLiteモジュール]
;*******************************************************************************
; からふるおぶじぇくとLiteモジュール by 月影とも さん (colorfulobject)
; modified by abo 2007.09.20
;*******************************************************************************
#ifdef __hsp30__
#ifndef __COLORFULOBJECT__
#define __COLORFULOBJECT__
#module "colorfulobject"
;// からふるおぶじぇくとLite HSP3移植版
#define MAXOBJ 512
;// オブジェクト最大数 (全ウィンドウ合計)
;// 登録したオブジェクトの数だけGDIの論理ブラシを作るので、
;// (システムリソースを食う) あんまり大きくしすぎない方向で。
;// cls 命令などでオブジェクトをクリアしたらその後 objcolorcls命令も実行して、
;// オブジェクトの登録を解除してあげてください。
;// ps.コンボボックスは2個食います。
;#uselib "gdi32.dll"
; #func global CreateSolidBrush "CreateSolidBrush" sptr
; #func global DeleteObject "DeleteObject" sptr
; #func global SetBkColor "SetBkColor" sptr,sptr
; #func global SetTextColor "SetTextColor" sptr,sptr
;#uselib "user32.dll"
; #func global InvalidateRect "InvalidateRect" sptr,nullptr,sptr
; #func global GetClassName "GetClassNameA" sptr,sptr,sptr
; #func global GetComboBoxInfo "GetComboBoxInfo" sptr,sptr
;#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)
#deffunc objcolor int objid, int bkcl, int txcl
_objcolor_add objid,bkcl,txcl, ginfo_sel
sdim classname,64
GetClassName objid,varptr(classname),64
if ClassName="ComboBox" {
dim comboboxinfo,20:comboboxinfo=52
GetComboBoxInfo objid,varptr(comboboxinfo)
_objcolor_add comboboxinfo.12 ,bkcl,txcl,ginfo_sel
}
InvalidateRect objid,"",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_
#endif
#endif
;//////// モジュールここまで ////////
#if 0 ;// サンプルここから 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
;--------------------------------------------------------------- (EOF) ---------