|
![](../images/spacer.gif) |
|
2008/10/14(Tue) 09:49:02|NO.20133
こんにちは。
久しぶりに前作ったランチャーを改良したいと思い、
設定を変更するchkboxを設置しようとしています。
そこで、自分なりに色々やってみて
一応chkboxの設置はできて、
次はそれぞれのchkboxの状態をテキストに保存しようと思ってるのですが、
それができません;;
一応、調べたりはしてみたのですが、やはりわかりません;
初歩的な質問ですが、どなたか教えてくださいm(._.)m
nbtn=10
fire = "設定保存用 テキスト.txt"
karent = dir_cur
exist fire ;テキストファイルのチェック
if strsize= 0 :goto ,*yomi
if strsize=-1 : dialog "データが読み込めないので、設定が初期化されました",1,"設定の初期化" : goto ,*syokika
*yomi ;設定読み込み
sdim btn,64,nbtn
sdim inp,500,nbtn
sdim pro,500,nbtn
sdim butn,64,nbtn
sdim chk,64,nbtn
sdim ch,64,nbtn
notesel np
noteload fire
repeat nbtn
noteget btn.cnt,cnt+1
noteget pro.cnt,cnt+12
loop
noteget butn,11
*modoru ;メイン画面
screen 0,200,300
color 166, 202, 240 : boxf
title "ランチャー"
objsize 100,50
repeat nbtn
pos (cnt\2)*100,cnt/2*50
button btn.cnt,*m
loop
objsize 100,50
pos nbtn*0,nbtn/4*125 : button goto "設定",*setei
pos nbtn*10,nbtn/4*125 : button goto "終了",*owari
stop
*setei ;設定画面
screen 0,427,325
color 166, 202, 240 : boxf
x = 32
y = 5
repeat nbtn
pos x-23,y+3 : objsize 12,12 : chkbox "",cnk.cnt
inp.cnt=btn.cnt
pos x,y : input inp.cnt,105,22
pos x+110,y+3 : input pro.cnt,208,16
objsize 65,21
pos x+324,y : button butn,*b
y+=25
loop
x = 105 : y = 34
px = 32 : py = 286
objsize x,y
pos px,py : button goto "詳細設定",*syosete
objsize x+103,y
pos px+110,py : button goto "登録して戻る",*touroku
objsize x-40,y
pos px+324,py : button goto "キャンセル",*modoru
stop
*syosete ;詳細設定画面
stop
*b
objid=stat ;押されたボタンのオブジェクトID
dialog "exe", 16, ""
if stat=1 {
i=objid/4
pro.i=refstr
objprm i*4+2,pro.i ;入力ボックスにpro.iをセットする
}
stop
*m
i=stat ;押されたボタンのオブジェクトID
exec pro.i
stop
*owari
end
*touroku ;設定保存
notesel np
chdir karent
repeat nbtn
btn.cnt = inp.cnt
noteadd btn.cnt,cnt+1,1
noteadd pro.cnt,cnt+12,1
noteadd chk.cnt,cnt+22,1
loop
notesave fire
goto *modoru
*syokika ;設定初期化
notesel np
noteadd "※このテキストは設定保存用ですので、削除しないでくださぃ。(削除すると、設定が初期化されます)"
repeat nbtn
a = int(cnt)+1
noteadd "未設定ボタン"+a+"",cnt+1,1
loop
noteadd "参照",11,1
notesave fire
goto *yomi
![](../images/bbs/mark_main.gif)
| |
|
2008/10/14(Tue) 12:34:34|NO.20135
チェックボックスの状態を保持する変数を保存しchkboxを設置する前に読み込めば良いです
が、全部cnkではダメです。
|
|
2008/10/14(Tue) 12:39:00|NO.20137
すみません訂正します。
>全部cnkではダメです。
cnk.cntを保存すれば良いです。
|
|
2008/10/14(Tue) 12:40:09|NO.20138
?配列 chk を sdim ではなく dim で作るように変える(数値扱いにする)
?chk を noteadd するときに ""+chk のようにする(文字列扱いにするため)
?noteget のときに 、
noteget tmp,cnt+22:chk.cnt=int(tmp)
…のように、文字として読み出したものを数値に変換しつつ配列に格納する
?chkbox 命令に与えているパラメータ cnk を chk にする
…で どうでしょう。
あと、notegetに与えている“インデックス”は、変数nbtnから計算しないといけませんね。+12 とかしてあると、nbtnが10でないときに変なことに なりませんか?
|
|
2008/10/14(Tue) 12:46:21|NO.20139
追伸
cnk.cntは配列変数なのでbload/bsaveで保存すれば良いですがどうしてもTXTファイルに保存
したければ数値→文字変換する必要がありますね。
|
|
2008/10/14(Tue) 12:50:00|NO.20140
|||-`ω-) なんでこの掲示板は 全角中点(真ん中に点のみの記号)が化けるんだろう…(汗)
|
|
2008/10/14(Tue) 13:45:39|NO.20142
button命令のところも直さないと 配列chkが使われずじまいになると思いますが、直しましたか?
|
|
2008/10/14(Tue) 14:06:31|NO.20145
すみません、完璧に私の間違いです
buttonでなく chkbox 命令でした。
○|?|_
|
|
2008/10/14(Tue) 14:17:55|NO.20146
すぃません;
さっきの書き込みは削除しました(ついでにミスして他のまで消しちゃいました^^;)
余分?なところも消したつもりです。
けどまだ保存ができなぃんです。
それで、下記が現在のスクリプトです
nbtn=10
fire = "設定保存用 テキスト.txt"
karent = dir_cur
exist fire ;テキストファイルのチェック
if strsize= 0 :goto ,*yomi
if strsize=-1 : dialog "データが読み込めないので、設定が初期化されました",1,"設定の初期化" : goto ,*syokika
*yomi ;設定読み込み
sdim btn,64,nbtn
sdim inp,500,nbtn
sdim pro,500,nbtn
sdim butn,64,nbtn
dim chk,64,nbtn
notesel np
noteload fire
repeat nbtn
noteget btn.cnt,cnt+(nbtn-9)
noteget pro.cnt,cnt+(nbtn+2)
noteget tmp,cnt+22 : chk.cnt=int(tmp)
loop
noteget butn,11
*modoru ;メイン画面
screen 0,200,300
color 166, 202, 240 : boxf
v = "ver.1.0"
title "ランチャー "+v+""
objsize 100,50
repeat nbtn
pos (cnt\2)*100,cnt/2*50
button btn.cnt,*m
loop
objsize 100,50
pos nbtn*0,nbtn/4*125 : button goto "設定",*setei
pos nbtn*10,nbtn/4*125 : button goto "終了",*owari
stop
*setei ;設定画面
dim chk,64,nbtn
screen 0,427,325
color 166, 202, 240 : boxf
x = 32
y = 5
repeat nbtn
pos x-23,y+3 : objsize 12,12 : chkbox "",chk.cnt
inp.cnt=btn.cnt
pos x,y : input inp.cnt,105,22
pos x+110,y+3 : input pro.cnt,208,16
objsize 65,21
pos x+324,y : button butn,*b
y+=25
loop
pos 9,260
color 0,0,0
mes "↑チェックありで確認メッセージの表示"
x = 105 : y = 34
px = 32 : py = 286
objsize x,y
pos px,py : button goto "詳細設定",*syosete
objsize x+103,y
pos px+110,py : button goto "登録して戻る",*touroku
objsize x-40,y
pos px+324,py : button goto "キャンセル",*modoru
stop
*syosete ;詳細設定画面
stop
*b
objid=stat ;押されたボタンのオブジェクトID
dialog "exe", 16, ""
if stat=1 {
i=objid/4
pro.i=refstr
objprm i*4+2,pro.i ;入力ボックスにpro.iをセットする
}
stop
*m
i=stat ;押されたボタンのオブジェクトID
exec pro.i
stop
*owari
end
*touroku ;設定保存
notesel np
chdir karent
repeat nbtn
btn.cnt = inp.cnt
noteadd btn.cnt,cnt+1,1
noteadd pro.cnt,cnt+12,1
noteadd ""+chk.cnt+"",cnt+22,1
loop
notesave fire
goto *modoru
*syokika ;設定初期化
notesel np
noteadd "※このテキストは設定保存用ですので、削除しないでくださぃ。(削除すると、設定が初期化されます)"
repeat nbtn
a = int(cnt)+1
noteadd "未設定ボタン"+a+"",cnt+1,1
loop
noteadd "参照",11,1
notesave fire
goto *yomi
![](../images/bbs/mark_main_g.gif)
| |
|
2008/10/14(Tue) 14:27:01|NO.20147
ぁっ、
ホントにすいません;
↑のスクリプトで保存ができました^^;
みなさんありがとぅございます。
では、また質問があった時はお願いします。
|
|
2008/10/14(Tue) 14:52:44|NO.20148
できないと思ったのは多分、勘違いではないですよ。
↑のスクリプトは、初回だけチェックボックス状態の保存に失敗します。
初回の動きに気をつけてみてください。
また、初回に限らず読み込みもできません…が、これはすぐに直せるでしょう。
|
|
2008/10/14(Tue) 18:05:16|NO.20153
>できないと思ったのは多分、勘違いではないですよ。
>↑のスクリプトは、初回だけチェックボックス状態の保存に失敗します。
>初回の動きに気をつけてみてください。
初回は失敗するんですかー。
ですが、なぜ失敗するんでしょうか?
>また、初回に限らず読み込みもできません…が、これはすぐに直せるでしょう。
ちょこちょこ変えてみたんですが、やっぱり読み込みができません(・Θ・;))
何度もすいませんが、どなたかアドバイスお願いしますorz
|
|
2008/10/14(Tue) 19:26:18|NO.20156
読めないのは、その ちょこちょこ が原因です。
最初のスクリプトには、読むのを邪魔している命令は入っていません。
ファイルから読み出してから、実際にそれを使うまでの間に、 何かしてはいけないことをしていませんか??
初回の書き出しに失敗するのは、
当然「初回しかしてない処理のどこかがおかしい」からです。
メモリノートへの書き込みが足りないところが ありませんか?
|
|
2008/10/14(Tue) 20:49:12|NO.20161
>最初のスクリプトには、読むのを邪魔している命令は入っていません。
>ファイルから読み出してから、実際にそれを使うまでの間に、 何かしてはいけないことをしていませんか??
ぅーん。
何回みても私には、わかりませんorz
度々すいませんが、どなたかご教授願います;;
>初回の書き出しに失敗するのは、
>当然「初回しかしてない処理のどこかがおかしい」からです。
>メモリノートへの書き込みが足りないところが ありませんか?
初回の処理といったら、『初期化設定』かな?
そこで、『初期化設定』のとこをちょっと変えたんですが、
なぜか追加した文が保存されませんorz
自分的にはこれで保存されると思ってるんですが、どこが違うのでしょうか?;;
前の記事のスクリプトで変更したところは、今のところ下記の部分だけです。
*syokika ;設定初期化
notesel np
noteadd "※このテキストは設定保存用ですので、削除しないでくださぃ。(削除すると、設定が初期化されます)"
repeat nbtn
a = int(cnt)+1
c = int(0)
noteadd "未設定ボタン"+a+"",cnt+1,1
noteadd "プログラムの選択",cnt+12,1
noteadd ""+c+"",cnt+22,1
loop
noteadd "参照",11,1
notesave fire
goto *yomi
|
|
2008/10/14(Tue) 21:27:48|NO.20163
まず読み込みの失敗に関して。
せっかく配列chkにデータを読み込んだのに、
設定画面を開くための処理の一番最初で、いきなり配列を初期化しちゃってます。
これでは、どんな設定になっていようと設定画面を開いた瞬間、絶対確実に全部カラッポになります。
次、初期化。
初期化の時点では、設定ファイルを作るためのメモリノートはカラっぽです。
1行目を書くところまではいいんですが、(cnt+12)行目がまだ存在しないのにそれを上書きしようとしています。
これだと書き込まれませんね。
|
|
2008/10/14(Tue) 22:24:30|NO.20165
>せっかく配列chkにデータを読み込んだのに、
>設定画面を開くための処理の一番最初で、いきなり配列を初期化しちゃってます。
>これでは、どんな設定になっていようと設定画面を開いた瞬間、絶対確実に全部カラッポになります。
ホントに初期化しちゃってましたね^^;
これで、読み込みはできるょうになりました^^
>次、初期化。
>初期化の時点では、設定ファイルを作るためのメモリノートはカラっぽです。
>1行目を書くところまではいいんですが、(cnt+12)行目がまだ存在しないのにそれを上書きしようとしています。
>これだと書き込まれませんね。
その通りですね(・Θ・;)
一応、自分なりに考えた結果下記のようになりました。
これで、初回からも設定が保存されるようになりました(^-^*)
何度も質問に答えていただき、本当にぁりがとうございます。
また何かありましたら、その時はお願いします(-m-)
*syokika ;設定初期化
notesel np
noteadd "※このテキストは設定保存用ですので、削除しないでくださぃ。(削除すると、設定が初期化されます)"
repeat nbtn
a = int(cnt)+1
noteadd "未設定ボタン"+a+"",cnt+1
loop
noteadd "参照",11
c = int(0)
repeat nbtn
noteadd "",cnt+12
noteadd ""+c+"",cnt+22
loop
notesave fire
goto *yomi
|
|