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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0212
としあきinput命令で、半角英数文字だけの入力3未解決


としあき

リンク

2007/2/12(Mon) 08:03:08|NO.5607

inputの入力ボックスに、たとえかな漢字変換にしてあっても、半角英数文字しか
入力出来ないようにしたいのですが、どうしたら良いでしょうか?

パスワードのサンプルスクリプトで、たとえば

input pass sendmsg objinfo_hwnd(0),204,'*' button goto "入力",*output *output mes pass stop
ですと、入力ボックスは「*」しか表示されないけど、pass変数には、
かな漢字変換しても半角英数文字文字しか入力しません。
自分としては、入力ボックスの「*」が余分で、取りたいのですが、
どうすれば良いのか分かりません。
どうかよろしくお願いします。



この記事に返信する


pizza

リンク

2007/2/13(Tue) 00:08:03|NO.5645

数値専用にしたいだけなら変数passを数値型にしておくだけでOKだったと思います。
半角英字も使いたいなら以下のようにしてみてください。
(HSP拡張マクロを使用するをオンにしてください)


#include "kernel32.as" #include "user32.as" #define EN_CHANGE 0x00000300 #define WM_COMMAND 0x0111 #define EM_GETSEL 0x00B0 #define EM_SETSEL 0x00B1 sdim pass,256 input pass : iInput = stat ;文字列型input button "output", *lb_output oncmd gosub *lb_OnCommand, WM_COMMAND flag = 1 stop *lb_OnCommand if lparam != objinfo(iInput, 2) : return if (wparam>>16&0xFFFF) == EN_CHANGE && flag { l = strlen(pass) sdim tmp, l+1 offset = 0 count = 0 repeat l c = peek(pass, cnt) // 2byte文字か調べる IsDBCSLeadByte c if stat : count+=2 : continue cnt+2 // アルファベットと数字か調べる IsCharAlphaNumeric c if stat == 0 : count++ : continue cnt+1 // 半角英数ならtmpに追加 poke tmp, offset, c offset++ loop if count { // inputの更新とキャレット位置の調整 sendmsg objinfo(iInput, 2), EM_GETSEL, 0, 0 i = stat pass = tmp flag = 0 //oncmd 0でも可 objprm iInput, pass ; 実行しなくても内部では半角英数のみになっている flag = 1 //oncmd 1でも可 sendmsg objinfo(iInput, 2), EM_SETSEL, i-count, i-count return 0 } } return *lb_output mes pass stop



Irisawa

リンク

2007/2/13(Tue) 00:57:04|NO.5647

数値だけを入力させたい場合はエディットコントロールのスタイルにES_NUMBER(0x2000)を
追加してやります。

http://yokohama.cool.ne.jp/chokuto/urawaza/prm/ctl_style.html#edit

ただし、16進数数字やカンマ、ドットなどは入力できませんので完全じゃないですね。
ASCII文字列も含むとなるとまた別です。
どちらかというとIMEを無効にした方が簡単な気がします。
IMEを無効にする方法はつい最近ありましたので検索してみてください。
(IMEを無効にしてもコピペなどされたら結局は意味がないですが)



としあき

リンク

2007/2/13(Tue) 21:44:27|NO.5670

返答ありがとうございます。
pizzaさんのサンプルスクリプトや、Irisawaさんの情報を元に、いろいろ試してみます。
あと、どうしても分からないのが、パスワードのウインドウのことです。

sendmsg objinfo_hwnd(0),204,'*'
だけで、打ち込まれた文字はみんな「*」になり、変数には半角英数しか入らないのに・・・。
「'*'」を取った

sendmsg objinfo_hwnd(0),204
では、かな漢字変換は効いてしまうんですよね。
自分の知識は「12歳からはじめる〜」で、今でも愛読しているレベルでは、この手のモノを扱うのは、
荷が重いです。



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