#uselib "gdi32" #cfunc GetStockObjectChk2 "GetStockObject" int #func GetObjectAChk2 "GetObjectA" int,int,var #cfunc CreateFontIndirectAChk2 "CreateFontIndirectA" var #cfunc CreateSolidBrushChk2 "CreateSolidBrush" int #func SetBkColorChk2 "SetBkColor" int,int #func SetTextColorChk2 "SetTextColor" int, int #define chkbox2(%1,%2) mref bmscr_CHK2,67:GetObjectAChk2 bmscr_CHK2.38,60,LF_CHK2:cxCHK2.CHK2cnt=ginfo(22):cyCHK2.CHK2cnt=ginfo(23):oxCHK2.CHK2cnt=bmscr_CHK2.29:oyCHK2.CHK2cnt=bmscr_CHK2.30:winobj "STATIC","",,0x50000000:hStatic_CHK2.CHK2cnt=objinfo(stat,2):pos cxCHK2.CHK2cnt+17,cyCHK2.CHK2cnt+(oyCHK2.CHK2cnt+abs(LF_CHK2.0))/2-abs(LF_CHK2.0):winobj "STATIC",%1,,0x50000000,oxCHK2.CHK2cnt-17,abs(LF_CHK2.0):sstat=stat:hStatic2_CHK2.CHK2cnt=objinfo(stat,2):pos cxCHK2.CHK2cnt,cyCHK2.CHK2cnt+(bmscr_CHK2.30+13)/2-13:objsize 13,13:chkbox "",%2:cstat=stat:hChk_CHK2.CHK2cnt=objinfo(stat,2):objsize oxCHK2.CHK2cnt,oyCHK2.CHK2cnt:sendmsg hStatic2_CHK2.CHK2cnt,0x30,CreateFontIndirectAChk2(LF_CHK2):CHK2cnt++:pos cxCHK2,cyCHK2+oyCHK2+5 #define ctype RGB_CHK2(%1,%2,%3) (%1|%2<<8|%3<<16) #define color2(%1,%2,%3) mod_col2_r=%1:mod_col2_g=%2:mod_col2_b=%3 oncmd gosub *WM_CTLCOLORSTATIC,0x138 oncmd gosub *WM_LBUTTONDOWN,0x201 oncmd gosub *WM_LBUTTONUP,0x202 oncmd gosub *WM_MOUSEMOVE,0x200 goto *JUMP_CHK2 *WM_CTLCOLORSTATIC /*WM_CTLCOLORSTATICメッセージを他にも使う場合はここに処理を追加してください (もし使うならこれをメインソースに含んだ方が早いかも)*/ repeat CHK2cnt if lparam=hStatic_CHK2.cnt{ ;SetBkColorChk2 wparam,0x01// ↓これを消してコメントアウトを二箇所外せば文字以外が透過される return CreateSolidBrushChk2(RGB_CHK2(mod_col2_r,mod_col2_g,mod_col2_b)) ;return GetStockObjectChk2(5); } if lparam=hStatic2_CHK2.cnt{ SetBkColorChk2 wparam,RGB_CHK2(mod_col2_r,mod_col2_g,mod_col2_b)//こっちを透過しようとすると黒くなる(重ねてる為?) SetTextColorChk2 wparam,RGB_CHK2(ginfo(16),ginfo(17),ginfo(18)) return GetStockObjectChk2(5) } loop return *WM_LBUTTONDOWN /*WM_LBUTTONDOWNメッセージを他にも使う場合はここに処理を追加してください (これはよく使うと思われるので、もし使うならメインソースに(略) )*/ mxCHK2=lParam&0xFFFF myCHK2=(lParam>>16)&0xFFFF repeat CHK2cnt coxCHK2=cxCHK2.cnt+oxCHK2.cnt coyCHK2=cyCHK2.cnt+oyCHK2.cnt if (mxCHK2>=cxCHK2.cnt)&&(mxCHK2<=coxCHK2)&&(myCHK2>=cyCHK2.cnt)&&(myCHK2<=coyCHK2){ sendmsg hChk_CHK2.cnt,0xF3,1,0 } loop return *WM_LBUTTONUP /*WM_LBUTTONUPメッセージを(以下同文)*/ mxCHK2=lParam&0xFFFF myCHK2=(lParam>>16)&0xFFFF repeat CHK2cnt sendmsg hChk_CHK2.cnt,0xF3,0,0 coxCHK2=cxCHK2.cnt+oxCHK2.cnt coyCHK2=cyCHK2.cnt+oyCHK2.cnt if (mxCHK2>=cxCHK2.cnt)&&(mxCHK2<=coxCHK2)&&(myCHK2>=cyCHK2.cnt)&&(myCHK2<=coyCHK2){ sendmsg hChk_CHK2.cnt,0xF2,0,0 if stat&0x01{ sendmsg hChk_CHK2.cnt,0xF1,0x00,0 }else{ sendmsg hChk_CHK2.cnt,0xF1,0x01,0 } } loop return *WM_MOUSEMOVE /*WM_MOUSEMOVE(以下同文)*/ mxCHK2=lParam&0xFFFF myCHK2=(lParam>>16)&0xFFFF repeat CHK2cnt coxCHK2=cxCHK2.cnt+oxCHK2.cnt coyCHK2=cyCHK2.cnt+oyCHK2.cnt if (mxCHK2>=cxCHK2.cnt)&&(mxCHK2<=coxCHK2)&&(myCHK2>=cyCHK2.cnt)&&(myCHK2<=coyCHK2){ sendmsg hChk_CHK2.cnt,0xF3,1,0 }else{ sendmsg hChk_CHK2.cnt,0xF3,0,0 } loop return *JUMP_CHK2
このモジュールを使って、背景色とチェックボックスの色を変更しました。
そこで、チェックボックスにチェックを入れると変数seに1が入り、チェックをはずすと変数seに0が入る。
そして、Okぼたんを押すと、seに入っている数をiniファイルに書き込み、再度起動するときにiniファイルを読み込んでseが0だったらチェックが入っていない状態になり、seが1だったらチェックが入っている状態にする。
というプログラムを作ってみたんですが、上手くいかなくて困っています。
以下自分で書いたプログラムです。
#include "chkbox2.as" color 0,0,0 boxf notesel inifile noteload "config.ini", 1000 noteget se, 1 pos 20,20//チェックボックス color 255,255,255//文字色 color2 0,0,0//背景色 font "MS Pゴシック",13//フォントも指定できる objsize 100,20 chkbox2 "ボタン",b if se="se=0" : noteadd "se=0", 1, 1 if se="se=1" : noteadd "se=1", 1, 1 button "OK",*ok stop *ok notesave "config.ini" stop
説明が下手ですがアドバイスお願いします。