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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
1116
としあきHSP3で、input命令を使って、半角10文字、全角5文字入力したい。6解決


としあき

リンク

2006/11/16(Thu) 00:35:04|NO.3495

 前のバージョンであるHSP2.61ですと、input命令で最大文字数を指定すると、指定した文字
数は半角文字で使用した場合の数で、全角だとその半分になりますが、HSP3にですと、指定さ
れた最大文字数は全角でも半角でも同じ使用文字数になります。
 出来たら、前バージョンのように、たとえば最大文字数を10と指定したら、半角文字10個、
全角文字5個入力できるようにしたいです。
 何かいい方法がございましたら、どうか教えてください。
 お願いします。



この記事に返信する


Irisawa

リンク

2006/11/16(Thu) 11:30:05|NO.3499

manifestリソースを組み込むとWinXP上では自動的に内部処理用の文字コードがUnicodeに
なってしまう仕様があるようです。
HSP3のランタイムファイルには標準でmanifestリソースが埋め込まれているのでそのせい
だと思います。


sdim buf, 64 input buf sendmsg objinfo(stat, 2), 0x00c5, 10, 0 stop

こうしても同じなため、方法は分かりません。
取得後にstrlenで文字数を取得するとかで対処するしかないかも。
WinXP以外(Win2k3やVistaなどは不明)では正常動作するはずなのでWinXP固有の仕様だと
思ってください。



としあき

リンク

2006/11/16(Thu) 21:24:13|NO.3524

Irisawaさん、返答ありがとうございます。

あれから自分でもいろいろ考えて、strmidを使った方法を考えました。

a="" input a button "おす",*hoge *hoge a=strmid (a,0,10) mes a stop
これだと、半角文字10個、全角文字5個になりますが、全角半角まじりですと、最後が全角で
中途半端だと、文字化けを起こします。
旧バージョンのinput命令だと、変数に入れられる文字数(というよりバイト数)がきっかり
決まっているので、半端になる部分は入らないようになっているので、とっても便利だった
のですが・・・

XP固有で仕方がない部分もあると思いますが、今作っているソフトではこの仕様は困るので、
ナントカならないでしょうか?



Irisawa

リンク

2006/11/16(Thu) 22:24:11|NO.3531

5byte目がMBCSの1byte目に一致するかどうかを調べて調整する方法ではどうでしょうか。


#uselib "msvcrt.dll" #cfunc _mbsbtype "_mbsbtype" sptr, int sdim buf input buf button "おす", *hoge *hoge ; 5byte 目の文字コード範囲をチェック if _mbsbtype(buf, 4) ! 1 { poke buf, 5, 0 } else { poke buf, 4, 0 } mes buf stop

_mbsbtypeは環境依存の可能性があるmsvcrt.dllを使用していますのでご注意下さい。

http://hspwiki.nm.land.to/?String%2F%B2%FE%B9%D4

も見た方がいいかも。



としあき

リンク

2006/11/17(Fri) 00:40:49|NO.3540

Irisawaさん、何度も返答していただきありがとうございます。

早速見ましたが、実を言うと、外部ファイルを使用したことが無く、「msvcrt.dll」や
「_mbsbtype」の意味がよく分かりませんが、なんとか理解して試してみたところうまく
いきました。ありがとうございます。

ただ、「環境依存の可能性があるmsvcrt.dllを使用しています」とありますが、どのような
不都合が起きるのかよくわかりません。もしよろしければ教えていただけないでしょうか?

あと、ゲームなどの名前入力のさい。input命令を使うと思いますが、半角10文字と、全角
10文字では、表示する長さが違うと思います。ゲーム画面で名前を表示するスペースだって
限られているのに制限が無く、ましてやXPだけに起こる症状なのでしたら、今までゲームを
作っていた人は、ネームエントリーの時、どうしていたんでしょうか?
この事情が分かる方がいましたら、教えてください。

p.s
このことを不都合としておにたまさんに報告すると、HSP3.0の次回のバージョンアップの
とき直してくれますかね?
自分としては、inputの最大文字数の指定は旧バージョンに合わせて欲しいと、切に願いま
す。



Irisawa

リンク

2006/11/17(Fri) 01:34:45|NO.3541

> ただ、「環境依存の可能性があるmsvcrt.dllを使用しています」とありますが、どのような
> 不都合が起きるのかよくわかりません。もしよろしければ教えていただけないでしょうか?

古いOS(Win95など)ではmsvcrt.dllが存在せずに動作しない可能性があります。
それでもMS-VC++インストールしてあれば動作するはずですが...。

一応、正常動作するものの、msvcrt.dllからエクスポートされている関数はすべて
Cランタイムライブラリの関数であり、HSP側から呼び出すことは推奨しない関数なので
まあ、不安でしたら上記で挙げたHSP開発Wikiのところで、HSPモジュールにより互換動作を
するモジュールがあったりするのでそちらを使用した方がいいかも。

> あと、ゲームなどの名前入力のさい。input命令を使うと思いますが、半角10文字と、全角
> 10文字では、表示する長さが違うと思います。ゲーム画面で名前を表示するスペースだって
> 限られているのに制限が無く、ましてやXPだけに起こる症状なのでしたら、今までゲームを
> 作っていた人は、ネームエントリーの時、どうしていたんでしょうか?

inputを使用せずにgetkeyなどで独自に取得して処理するとか別の方法をとることが考えられ
ます。

> このことを不都合としておにたまさんに報告すると、HSP3.0の次回のバージョンアップの
> とき直してくれますかね?
> 自分としては、inputの最大文字数の指定は旧バージョンに合わせて欲しいと、切に願いま
> す。

これはHSP側ではなくOS側の仕様(WinXPが勝手に自動で変換してしまう)なので解決方法が
ないんですよね。
こういったところはさすがMS(というよりも英米の人たちってそういったマルチバイト文字に
対する考え方が足りないというか)って感じなのでしょうか。(^_^;
恐らくは何か他の方法があるんだと思いますが、ちょっと知りません。
どうしても、というときはmanifestリソースの含まれていないランタイムファイルを自作
するしかないかもしれません。
ResourceHackerでmanifestリソースを削除すると恐らく正常動作しなくなってしまうので。



としあき

リンク

2006/11/17(Fri) 21:06:09|NO.3556

Irisawaさん、返答していただきありがとうございます。
大変よく分かりました。
input命令はIrisawaさんの教えていただいた方法で対応します。

いろんなことを質問したのに、親切に対応していただき、感謝しています。
本当にありがとうございます。



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