オブジェクトの背景色・文字色を変更する

オブジェクトの背景色・文字色を変更する

WindowsVistaで確認したところ、ボタンなどは変わらず、チェックボックス、入力/メッセージボックスや、コンボボックスの一覧(?)を表示させた時などに変更されています。

//---------- モジュール始 ----------//
#module
#define MAXOBJ 256
#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_
//---------- モジュール終 ----------//
screen 0
objcolorscreen
title "オブジェクトの背景色変更"
a="オブジェクトの" : b="背景色と文字色を" : c="変更できる"
objmode 2 : font "MS UI Gothic",20
mesbox a,640,160,1,500
objcolor stat,$000000,$FFFFFF
mesbox b,640,160,1,500
objcolor stat,$88FFFF,$000000
mesbox c,640,160,1,500
objcolor stat,$FFFFAA,$000000

ex)


「オブジェクトの背景色・文字色を変更する」への3件のフィードバック

  1. >>ソースはご自由にお使いください。
    って言われてもなぁ。
    どういうときに使うかな?
    まあWin32APIを使ってるのはすごいと思うよ。
    頑張ってね。

  2. 頑張ります。

    注:ディレクトリ一覧取得ソフトはまだ公開していないのと、PCができない人用に作ったということだけ言っておきます。

コメントは受け付けていません。