|
|
2013/2/7(Thu) 11:14:41|NO.52221
ウィンドウを生成してそのなかに、
テキスト入力フォームを埋め込みたいのですが
うまくいきません・・・。
テキスト入力が終わったらさらに.txtデータに書き出して保存したいと思っています。
さらに仕様で 数字16個入力した場合 1111,1111,1111,1111 みたいに
,区切りで保存がしたいです。
16個入力した後最後に改行し、また書き込めるプログラムが仕様ですね・・・
|
|
2013/2/7(Thu) 14:06:51|NO.52224
「入力フォーム」というのがどういうものかよく分からなくてすみませんが、
input命令で「入力ボックス」なら設置できます。
とりあえず、入力値が16桁の整数であるという場合のスクリプトを書いてみました。
*start1
inp1 = ""
*start2
screen 0,400,300,0
title "test"
pos 5,5 : mes "16個の数字を入力してください↓"
objmode 1,1
pos 5,30 : input inp1,200,18,0
objsize 80,50
pos 310,240 : button goto "保存",*save1
*main
stop
*save1
letter1_save1 = inp1
letter2_save1 = "";初期化
repeat 16/4 - 1
letter2_save1 += strmid(letter1_save1,4*cnt,4) + ","
loop
letter2_save1 += strmid(letter1_save1,4*3,4);最後の4桁は別処理
*save2
dialog "txt",17,"テキストファイル"
fname_save = refstr
*save3
onerror goto *error1
notesel letter2_save1
notesave fname_save
onerror 0
dialog "報告\n\n保存しました。",1,"test"
goto *main
stop
*error1
dialog "エラー\n\n保存に失敗しました。\n再試行しますか?",3,"test"
if stat = 6 : goto *save3
dialog "報告\n\n保存を中止しました。",1,"test"
goto *main
|
|
2013/2/7(Thu) 14:16:12|NO.52225
連投すみませんが、
>16個入力した後最後に改行し、また書き込めるプログラムが仕様ですね・・・
「16個入力した後最後に改行し、また書き込」んだ場合、そのときは数字が16個とは限りませんよね。
(※常に16個の数字しか扱わない仕様でしたら問題ありませんので読み飛ばしてください。)
そうなると「また書き込」む時は入力文字数からは区切り位置を決定できないと思いますので、
区切るために何らかの記号または特定の文字列が必要になるでしょうね。
既に考慮していらっしゃるようでしたらすみません。ちょっと気になったので投稿しました。
|
|
2013/2/7(Thu) 14:25:40|NO.52226
保存抜き・桁数不問です。
in = "1234123412341234"
notesel csv
pos 5, 5 : input in, 200, 20
pos 210, 5 : button "追加", *get_num
pos 5, 40 : mesbox csv, 300, 300 : id_mesbox = stat
stop
*get_num
digit = 4
row = ""
repeat
cut = strmid(in, cnt * digit, digit)
if cut == "" : break
row += cut + ","
loop
poke row, strlen(row) - 1, 0 ;最後の文字を削除
noteadd row, -1
objprm id_mesbox, csv
stop
|
|
2013/2/7(Thu) 17:33:04|NO.52227
>>16個入力した後最後に改行し、また書き込めるプログラムが仕様ですね・・・
「仕様ですね…」の日本語がさっぱりです 自分が馬鹿なだけなんでしょうか・・・
それと"区切る"と言うのは文字列にCSV形式ににカンマで区切りたいんでしょうか?
できればしっかり説明してほしいです
|
|
2013/2/7(Thu) 19:36:31|NO.52228
もしかしたら
16字入力した場合「,」を挿しこんで入力フォーカスを次行に移す機能を実装したいと言うことでしょうか?
それと
仕様とは仕様書に記述してある『装置の動作』の事も指します。
こういう場合には使いません。無難に機能という言葉と置き換えた方がよいでしょう。
|
|
2013/2/8(Fri) 02:02:44|NO.52237
書いた通りにつくれって意味で仕様なんでしょ
問題が何か書かれているわけでもないし
代わりにコード書いてくれる人もいるし
|
|
2013/2/8(Fri) 09:58:36|NO.52238
申し訳ありません日本語がだいぶ変でした^^;
少し機能をわがままながら変えました
ボタンをウィンドウの中に生成し、
ボタン1を入力したときは、1000をウィンドウ内でテキストを表示
図で説明すると
_ウィンドウ______________________________________________
|
|{ボタン1}← クリック
|
|
|
| __________________________
| |1000 ← クリックした瞬間表示
| |
| |
| |
| |
| |
| |
| |____________________________________________________
|
| |保存|
|_____________________________
4回押せば16個になるとおもいますが、16個になった瞬間自動的に
改行できるようなものがあったら良いなと思っています。
そして形式は、txtで保存し、保存した結果が
4ケタづつで区切ってあるみたいなのが主な機能です。
|
|
2013/2/8(Fri) 10:21:26|NO.52239
screen 0 , 640 , 480 , 0 , -1 , -1 , 0 , 0
sdim buf, 8096
pos 20,20
button "ボタン1", *write ;1000を押したときmesboxへ表示
pos 20,450
button "保存", *save
pos 30,200
mesbox buf,550, 240, 5
stop
*write
*save
;mesboxの文字を保存
|
|
2013/2/8(Fri) 10:51:01|NO.52240
screen 0 , 640 , 480 , 0 , -1 , -1 , 0 , 0
*main
sdim buf, 8096
pos 20,20
button "ボタン1",*write
if flg = 1 : buf = "1001"
pos 30,200
mesbox buf,550, 240, 5
stop
*write
flg = 1
goto *main
一応書き込むことはできました。糞コードですが、
問題点はテキストエリアをクリックすると消えてしまうこと。
2度目のクリックが効かないことです。
|
|
2013/2/8(Fri) 14:12:26|NO.52242
色々試行錯誤した結果。
2回目にクリックして 10001000 のように。
2度目の処理が効かないのは、
上書きされてしまってることなのに気付きました。
処理は実行されていても見た目では動いてないみたいですね。
ネットを探し回ってsendmsgという命令を見つけたのですが
それを使えばできるでしょうか?
使い方が難しく、うまく1000の後ろに反映されません。
|
|
2013/2/8(Fri) 14:51:04|NO.52243
あなたが何をしたいのか全く理解できないです
とりあえず、
>>NO.52240
はボタンをおすたびに新しいオブジェクト(mesboxとbutton)が同じ場所に重なっていってます
ずっと押してるとエラーになります
また、writeに飛んだあとsdimがあり変数が初期化されてflgで内容を決めていますが、
そのflgもよくわからない使い方をしています
randomize
screen 0 , 640 , 480 , 0 , -1 , -1 , 0 , 0
sdim buf, 8096
pos 20,20
button "ボタン1",*write
button "保存",*hozon
button "消去",*shokyo
pos 30,200
mesbox buf,550, 240, 5
*main
stop
*write
buf += strf("%04d",rnd(10000))
flg++
if flg = 4{
flg=0
buf += "\n"
}
objprm 3,buf
goto *main
*hozon
if buf=""{
dialog "何も入力されていません"
goto *main
}
size = 0
sdim buf2, 8096
sdim buf3, 8096
split buf,"\n",buf2
repeat stat
lc = cnt
repeat strlen(buf2(lc))/4
buf3 += strmid(buf2(lc),cnt*4,4)+","
size+=5
loop
poke buf3, strlen(buf3)-1,0
buf3 +="\n"
size++
loop
poke buf3,strlen(buf3)-1,0
size--
bsave "a.txt",buf3,size
sdim buf2
sdim buf3
dialog "保存完了"
goto *main
*shokyo
sdim buf, 8096
objprm 3,buf
goto *main
そしてgao-さんの望んでいるものと思われるものです
数字だけだなら4桁ずつの区切りに対応しています(一行に16文字なくても)
数字以外のものが入るとダメです めんどくさいので必要な機能なら頑張ってください
|
|
2013/2/9(Sat) 02:21:10|NO.52255
/*ご参考*/
font msmincho,16 :objmode 2
button gosub "追 加",*label_1
button gosub "消 去",*label_2
button gosub "保 存",*label_3
sdim dd,1024 :notesel dd
mesbox dd,200,200 :hh = objinfo(3,2)
stop
*label_1 : :ss = strf("%04d",rnd(9999)) :ii++
:sendmsg hh,$C2,0,varptr(ss)
if (ii\4 == 0) {ss = "\n" :sendmsg hh,$C2,0,varptr(ss) :ii = 0}
else {ss = "," :sendmsg hh,$C2,0,varptr(ss)} :return
*label_2 :objprm 3,"" :ii = 0 :return
*label_3 :dialog,17 :if (stat) {notesave refstr} :return
|
|
2013/2/10(Sun) 15:59:21|NO.52280
日本語下手な質問に答えていただきありがとうございました。
おかげで作りたかったモノができました本当にありがとうございました!
|
|