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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0207
gao-HSPでテキスト入力ができるようにしたい。13解決


gao-

リンク

2013/2/7(Thu) 11:14:41|NO.52221

ウィンドウを生成してそのなかに、
テキスト入力フォームを埋め込みたいのですが
うまくいきません・・・。

テキスト入力が終わったらさらに.txtデータに書き出して保存したいと思っています。

さらに仕様で 数字16個入力した場合 1111,1111,1111,1111 みたいに

,区切りで保存がしたいです。

16個入力した後最後に改行し、また書き込めるプログラムが仕様ですね・・・



この記事に返信する


FunnyMaker

リンク

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



FunnyMaker

リンク

2013/2/7(Thu) 14:16:12|NO.52225

連投すみませんが、


>16個入力した後最後に改行し、また書き込めるプログラムが仕様ですね・・・

「16個入力した後最後に改行し、また書き込」んだ場合、そのときは数字が16個とは限りませんよね。
(※常に16個の数字しか扱わない仕様でしたら問題ありませんので読み飛ばしてください。)
そうなると「また書き込」む時は入力文字数からは区切り位置を決定できないと思いますので、
区切るために何らかの記号または特定の文字列が必要になるでしょうね。

既に考慮していらっしゃるようでしたらすみません。ちょっと気になったので投稿しました。



HT.

リンク

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



@key

リンク

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

書いた通りにつくれって意味で仕様なんでしょ
問題が何か書かれているわけでもないし
代わりにコード書いてくれる人もいるし



gao-

リンク

2013/2/8(Fri) 09:58:36|NO.52238

申し訳ありません日本語がだいぶ変でした^^;

少し機能をわがままながら変えました

ボタンをウィンドウの中に生成し、

ボタン1を入力したときは、1000をウィンドウ内でテキストを表示

図で説明すると

_ウィンドウ______________________________________________
|
|{ボタン1}← クリック
|
|
|
| __________________________
| |1000  ← クリックした瞬間表示          
| |                          
| |                          
| |                          
| |                          
| |                          
| |                          
| |____________________________________________________
|
| |保存|
|_____________________________

4回押せば16個になるとおもいますが、16個になった瞬間自動的に
改行できるようなものがあったら良いなと思っています。
そして形式は、txtで保存し、保存した結果が

4ケタづつで区切ってあるみたいなのが主な機能です。



gao-

リンク

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の文字を保存



gao-

リンク

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度目のクリックが効かないことです。



gao-

リンク

2013/2/8(Fri) 14:12:26|NO.52242

色々試行錯誤した結果。
2回目にクリックして 10001000 のように。
2度目の処理が効かないのは、
上書きされてしまってることなのに気付きました。
処理は実行されていても見た目では動いてないみたいですね。

ネットを探し回ってsendmsgという命令を見つけたのですが
それを使えばできるでしょうか?
使い方が難しく、うまく1000の後ろに反映されません。



kanahiron

リンク

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文字なくても)
数字以外のものが入るとダメです めんどくさいので必要な機能なら頑張ってください



fortunehill

リンク

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



gao-

リンク

2013/2/10(Sun) 15:59:21|NO.52280

日本語下手な質問に答えていただきありがとうございました。
おかげで作りたかったモノができました本当にありがとうございました!



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