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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
1225
mes "(゚∀゚)"mesbox上でのエンターによる処理7解決


mes "(゚∀゚)"

リンク

2010/12/25(Sat) 04:01:38|NO.36332

 度々申し訳ありません。

 mesbox上でエンターキーを押したときに割り込む命令を作っているのですが、
どうしてもエンターによって\nが書きこまれてしまいます。
これだと文字の間にカーソルがあると「こんに\nちわ」というように変な改行が
入ってしまいます。
シフトを押している間は普通にエンターが働くようにしたいので縦スクロールバーがない
inputを使うわけにはいかず困っています。

 もし良い案があればご教授願います。



この記事に返信する


ANTARES

リンク

2010/12/25(Sat) 06:40:14|NO.36334

 素直にほかのキーにしたら?



hsp初心者

リンク

2010/12/25(Sat) 08:54:41|NO.36337

onkeyでできるのでは?
それでジャンプ先で書き込まれた文字列を消してから次の実行を行えばいと思いますが。
後はmesboxのフォーカスを無効にするとかて、これはさすがに無理ですか><



ESZET

リンク

2010/12/25(Sat) 10:04:34|NO.36339

	onkey gosub *inkey
txt = "" mesbox txt, 640, 480, 1, 0 stop *inkey getkey enter, 13 if enter == 1 { //エンターキーが押されていたら txt = strtrim(txt, 2, 2573) //最後の\nを取り除く objprm 0, txt //メスボックス書き換え } return
失敗作ですが何かの参考になるかと



mes "(゚∀゚)"

リンク

2010/12/25(Sat) 11:19:48|NO.36340

返信有難うございます。

ANTARESさん
>素直にほかのキーにしたら?
それも検討したのですが、
一般的なメッセンジャーと同じUIにしたいので、キーを変えるわけにはいかないです。

hsp初心者さん
>onkeyでできるのでは?
もちろんonkeyを使用しています。
しかし、onkeyによる割り込みより先に\nがmesboxに書きこまれてしまうのです。
inputなら改行ができない(?)仕様なのですが、スクロールバーを付け足すsendmsg
がうまくいかず・・・orz

>ESZETさん
 コード有難うございます。これを応用して、入力カーソルの位置を取得して、
 \nを消すこともできそうなのですが、どうもうまくいかないのです。



hsp初心者

リンク

2010/12/25(Sat) 12:43:59|NO.36341

思いつきですが、タイムウエートを使ってやったらどうでしょうか?
説明すると
1、入力が行われてからのウエートでmesboxのフォーカスを無効にする。
2、エンターキー以外はフォーカスをmesboxに戻す。(フォーカスを戻したとき入力でき
なかった文字列を一時的に保存する変数が必要)
3、エンターキーを押されたとき前回入力した時間幅を比較し、実行処理を変える。
こんな感じで作れば無事いけそうですが。
ただ時間幅の設定がシビアかもしれませんがいけそうな感じが・・。
ソースにすると大変かも知れませんが><
がんばってください!



cookies

リンク

2010/12/25(Sat) 14:19:55|NO.36347

少々強引かもしれませんが
#define WM_COMMAND $111 
oncmd gosub *inkey,WM_COMMAND txt = "" mesbox txt, 640, 480, 1, 0 stop *inkey getkey enter, 13 if enter == 1 { //エンターキーが押されていたら objprm 0,txt //メスボックス書き換え } return
こんなんでどうでしょう。

きっとonkeyはキーを押すのを  どうするかの処理割り込みに対して、
   oncmdはキーを押されたのをどうするかの処理割り込みなのでしょう。
(↑間違ってたらすみません)

Enter押すとカーソルが戻るのは勘弁してください。



mes "(゚∀゚)"

リンク

2010/12/25(Sat) 16:13:04|NO.36353

hsp初心者さん
よく理解できてないかもしれませんが
エンターが入力される直前までの文字列を別変数に退避しておき、
エンターが押されたときにその直前の文字列で確定して無駄な改行の入った文字列は破棄する
ということですね。これは思いつきませんでした。

cookiesさん
カーソルは位置を記憶しておき、後でそのポジションに移動すればできますが、
少し手間がかかりますな。未熟な自分では大変かも・・・。

回答案をだしてくださった皆様、ありがとうございました。



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