HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0828
souチェックボックスの情報をiniファイルに保存11解決


sou

リンク

2012/8/28(Tue) 19:22:35|NO.48876


#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


説明が下手ですがアドバイスお願いします。



この記事に返信する


ヂオン

リンク

2012/8/29(Wed) 00:28:55|NO.48881

>>kanahiron
 http://ja.wikipedia.org/wiki/INI%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB 
 上記のサイトにもあるように。

 ini ファイルは 簡単な文字列ファイルにする傾向が有るらしい
 ini の拡張子を持つファイルは、テキスト型に、統一したほうが恥をかかないかもしれませn。



kanahiron

リンク

2012/8/29(Wed) 01:22:36|NO.48883

失礼しました
ごちゃごちゃするのでNO.48877は消させていただきました

#include "chkbox2.as"
color boxf sdim inifile,1024 notesel inifile exist "config.ini" if strsize = -1{ notesave "config.ini" } noteload "config.ini" noteget se,0 if se = "se=0":se=0 if se = "se=1":se=1 pos 20,20//チェックボックス color 255,255,255//文字色 color2 0,0,0//背景色 font "MS Pゴシック",13//フォントも指定できる objsize 100,20 chkbox2 "ボタン",se button "OK",*ok stop *ok if se = 0 :noteadd "se=0",0,1 if se = 1 :noteadd "se=1",0,1 notesave "config.ini" stop



sou

リンク

2012/8/29(Wed) 09:49:22|NO.48890

kanahironさん

スクリプトを実行してみたところ、21行目のところでパラメーターの型が違いますと出てしまいます。



fortunehill

リンク

2012/8/29(Wed) 10:10:17|NO.48891

/*noteget と併用している se ファイル情報が無い時文字列型だからです*/

if se ="" :se=0 ;を追加するか se = int(se) ;直前で型を変換すれば動くハズ



sou

リンク

2012/8/29(Wed) 11:10:25|NO.48893

fortunehillさんの言うとおり


se = int(se)

を直前に追加したら動きました。

けど、起動するときに必ずチェックが入った状態になってしまいます。

起動したらiniファイルの情報を読み込むのができていないのでしょうか?



fortunehill

リンク

2012/8/29(Wed) 12:44:27|NO.48894

/*こんな所に落とし穴が 数値に成った se(0が代入された) と文字列 "se=1" を比較した場合 0==0
本来は notegeto との汎用は止めるべきだと思うけど if 文で誤魔化してみる*/

if se = "se=0" {se=0} else:if se = "se=1" {se=1} else    {se=0}



kanahiron

リンク

2012/8/29(Wed) 13:07:09|NO.48895

自分の環境でエラーなく、

if se = "se=0":se=0
で一回文字型になった変数「se」がint型に変わっていたので大丈夫だろうと判断し投稿しました

解決策としては13〜15行目の変数に別のもの使えば大丈夫です

noteget se_,0 if se_ = "se=0":se=0 if se_ = "se=1":se=1




sou

リンク

2012/8/30(Thu) 14:11:13|NO.48931

回答ありがとうございます。

kanahironさんに言われたとおり13行目〜15行目を


noteget se_,0 if se_ = "se=0":se=0 if se_ = "se=1":se=1

に変えてみましたが、変化なしです・・・

チェックをはずしてOKを押しても変数se_にse=1が入ったままになっているのがダメなんですよね?



fortunehill

リンク

2012/8/30(Thu) 14:47:10|NO.48934

/*chebox2 はラベル2個とボタン1個で構成されていますが se の取得に不具合があるかも?*/
/*此のスクリプトに拘る魅力が判りませんが、目的によっては他にも方法があると思います*/


*ok sendmsg objinfo(2,2),$F0 :se = stat ;値を直接取得する。 if se = 0 :noteadd "se=0",0,1 if se = 1 :noteadd "se=1",0,1 notesave "config.ini" stop



fortunehill

リンク

2012/8/30(Thu) 15:47:39|NO.48935

/*ご参考*/

#include "user32.as" #include "gdi32.as" #include "kernel32.as" sdim rr,260 ff = dirinfo(0)+"/config.ini" ;exist ff :if (strsize == -1) {bsave ff,rr,0} ;(必要なら空ファイル作成) GetPrivateProfileStringA "CHECK","SE","0",varptr(rr),260,ff :nn = int(rr) ;ini読込 :boxf :objsize 13,13 :pos 20,20 chkbox "",nn :pos 33,20 winobj "static"," ボタン",0,$50000000,64,13 :ii = stat ;スタッチック作成(ラベル) :font msmincho,12 :mref jj,67 ;フォントハンドル取得 :sendmsg objinfo(ii,2),$30,jj(38),1 ;フォントの適用 :SetWindowPos hwnd,0,0,0,0,0,$27 ;再描画 :CreateSolidBrush $0 :hh = stat ;背景用ブラシ(黒) :objsize 64,24 :pos 20,40 button gosub "OK",*label :oncmd gosub *label_1,$138 ;スタッチック色処理 :onexit *label_2 ;終了時処理 stop *label WritePrivateProfileStringA "CHECK","SE",str(nn),ff ;ini書込 return *label_1 SetTextColor wparam,$ffffff SetBkMode wparam,1 return hh *label_2 DeleteObject hh end



sou

リンク

2012/8/30(Thu) 20:21:37|NO.48942

みなさんありがとうございました。

無事動きました。



ONION software Copyright 1997-2023(c) All rights reserved.