トップページ > 過去ログ > 記事閲覧
MakeKeyInputの入力時に余計な入力データが
名前:アリ 日時: 2011/09/02 17:51

お初になります。 MakeKeyInputを利用して文字入力を行おうと思ったのですがDrawKeyInputStringで途中経過を表示させると何も入力していないのに余計な入力データが表示されています。 恐らく私のプログラムの「文字を入力する状態に入るボタン」を押すまでのキー入力が表示されています。 丁度リファレンスページのint ClearInputCharBuf( void ) ;の解説と同じような状態です 名前を入力する状態に入ってからMakeKeyInput、SetActiveKeyInputを行ってみたり ClearInputCharBuf( void )を入れてみたりしたのですがどうにも治りません どのようにすればこれを防げるでしょうか? 原因?なのですがexeを起動してから文字入力状態に入るまでに入力モードをかな入力に変更するとこの問題が起きています

Page: 1 |

Re: MakeKeyInputの入力時に余計な入力データが ( No.1 )
名前:いっち 日時:2011/09/02 22:31

> 原因?なのですがexeを起動してから文字入力状態に入るまでに入力モードをかな入力に変更するとこの問題が起きています 「入力モードをかな入力」とありますが、ローマ字入力の場合は発生しないのでしょうか? それとも単に、日本語IMEをONにするという意味でしょうか?
Re: MakeKeyInputの入力時に余計な入力データが ( No.2 )
名前:アリ 日時:2011/09/02 23:09

>いっちさん ローマ字入力のままで名前を入力する状態に入ると余計な入力データは入っていない、といった意味ですね
Re: MakeKeyInputの入力時に余計な入力データが ( No.3 )
名前:いっち 日時:2011/09/03 00:50

※修正しました 以下のような、コードでテストを行いましたが、私の環境では再現しませんでした。 何かしらの文字キーを押下した後に、Zキーを押下して入力を有効にした場合、 入力中の文字の表示は以下のような結果になりました。 IME:OFF IME:ON ローマ字入力 何も表示されない IMEのバッファの内容(Zキーを含む)が表示される かな入力 何も表示されない IMEのバッファの内容(Zキーを含む)が表示される (※IMEのバッファの内容はデフォルトで黄色背景に黒字で表示) 上記のようにローマ字入力の場合も、かな入力の場合も同一の結果となりました。 アリさんのご使用のDXライブラリのバージョンはおいくつでしょうか? また、IMEは何をご使用でしょうか? //- 以下、テストコード -// #include "DxLib.h" int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int ) { ChangeWindowMode( TRUE ); SetWindowText( "DxLib:" DXLIB_VERSION_STR ); if ( DxLib_Init( ) == -1 ) return -1; int white = GetColor( 255, 255, 255 ); char str[256] = {}; int ih = MakeKeyInput( 50, FALSE, FALSE, FALSE ); SetDrawScreen( DX_SCREEN_BACK ); while ( ProcessMessage( ) == 0 ) { ClearDrawScreen( ); if ( CheckHitKey( KEY_INPUT_Z ) ) { SetActiveKeyInput( ih ); } if ( CheckKeyInput( ih ) ) { GetKeyInputString( str, ih ); } DrawFormatString( 0, 0, white, "TEST:%s", str ); DrawKeyInputModeString( 640, 480 ); DrawKeyInputString( 0, 100, ih ); ScreenFlip( ); } DeleteKeyInput( ih ); DxLib_End( ); return 0; }
Re: MakeKeyInputの入力時に余計な入力データが ( No.4 )
名前:アリ 日時:2011/09/03 01:11

DXライブラリは3.05fを使用しています IMEはgooglIMEを使っています・・・マイクロソフトオフィス2007でも試してみましたが結果は一緒でしたが こちらでもそのテストプログラムを起動してやってみましたがやはりかな入力モードでのみzを押す前のバッファが表示されましたね
Re: MakeKeyInputの入力時に余計な入力データが ( No.5 )
名前:いっち 日時:2011/09/03 11:37

事象発生時の Log.txt をご提供いただけますか? > こちらでもそのテストプログラムを起動してやってみましたがやはりかな入力モードでのみzを押す前のバッファが表示されましたね IMEが ON の状態でも、OFF の状態でも「かな入力モード」であれば発生するのでしょうか?
Re: MakeKeyInputの入力時に余計な入力データが ( No.6 )
名前:アリ 日時:2011/09/03 16:28

0:システムの情報を出力します 3: DXライブラリ Ver3.05f 4: 論理プロセッサの数 : 2 5: OS Windows7 ( Build 7601 Service Pack 1 ) 123: CPU動作速度:大体2.52GHz 131: MMX命令を使用します 133: SSE命令が使用可能です 135: SSE2命令が使用可能です 137: CPUベンダ:GenuineIntel 149: CPU名:Intel(R) Core(TM)2 Duo CPU P8700 @ 2.53GHz 155:COMの初期化... 成功しました 393:メモリ総量:3003.89MB 空きメモリ領域:1006.45MB 396:タイマーの精度を検査します 415:精度結果 更新回数 マルチメディアタイマー:1 パフォーマンスカウンター:60 418: パフォーマンスカウンターを使用します タイマー精度 : 2467.792000 KHz 421: ソフトの二重起動検査... 二重起動はされていませんでした 425:ウインドウクラスを登録します... 登録に成功しました 433:ウインドウモード起動用のウインドウを作成します 488:ウインドウの作成に成功しました 563:IMEを無効にしました 567:ウインドウスタイルをウインドウモード用に変更します... 完了 572:DirectInput関係初期化処理 574: DirectInput7 の取得中... 成功 721: 引き続き初期化処理... 初期化成功 726: ジョイパッドの初期化... 759: 入力装置を見つけました 766: デバイスの登録名:Macro Vibration Joystick - Single 768: デバイスの製品登録名:Macro Vibration Joystick - Single 785: ジョイパッドの追加は正常に終了しました 787: ジョイパッドの初期化は正常に終了しました 789: マウスデバイスの初期化... 初期化成功 793: キーボードデバイスの初期化... 初期化成功 799:DirectInput 関連の初期化は正常に終了しました 807:DirectSound の初期化を行います 808:DirectSound インターフェースの取得を行います.... 成功 830:引き続きインターフェースの初期化処理... 成功 1210: DirectSound デバイスを列挙します 1213: モジュール名: ドライバ記述:プライマリ サウンド ドライバー 1216: モジュール名:{0.0.0.00000000}.{e824679c-2967-4fb7-b3f2-59cd1d61475d} ドライバ記述:スピーカー (Realtek High Definition Audio) 1219: 最大サンプリングレート:200.00KHz 最小サンプリングレート:0.10KHz 1220: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB 1222: 利用可能サンプリング精度 1225: プライマリ 16bit = OK 8bit = OK 1226: セカンダリ 16bit = OK 8bit = OK 1228: 利用可能チャンネル 1230: プライマリ MONO = OK STEREO = OK 1231: セカンダリ MONO = OK STEREO = OK 1235:DirectSound の初期化は正常に終了しました 1282:DirectDraw オブジェクトの取得を行います.... 成功 1303:引き続き初期化処理... 初期化に成功しました 1514:IDirect3D9Ex オブジェクトを取得します.... 成功 1521:IDirect3DDevice9Ex オブジェクトを取得します.... ハードウエア頂点演算を使用します 2078:成功 2097:Driver:igdumdx32.dll Description:Mobile Intel(R) 4 Series Express Chipset Family 2100:画面のフォーマットは D3DFMT_X8R8G8B8 です 2102:Zバッファのフォーマットは D3DFMT_D16 です 2103:16bit カラーフォーマットは D_D3DFMT_R5G6B5 です 2107:32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です 2108:アルファ付き 16bit カラーフォーマットは D_D3DFMT_A4R4G4B4 です 2110:アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です 2113:アルファテスト用 16bit カラーフォーマットは D_D3DFMT_A1R5G5B5 です 2117:アルファテスト用 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です 2119:DXT1テクスチャフォーマットは D_D3DFMT_DXT1 です 2121:DXT2テクスチャフォーマットは D_D3DFMT_DXT2 です 2122:DXT3テクスチャフォーマットは D_D3DFMT_DXT3 です 2124:DXT4テクスチャフォーマットは D_D3DFMT_DXT4 です 2127:DXT5テクスチャフォーマットは D_D3DFMT_DXT5 です 2130:描画用 16bit カラーフォーマットは D_D3DFMT_R5G6B5 です 2131:描画用 32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です 2152:描画用アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です 2158:描画用ABGR浮動小数点16ビット型カラーフォーマットは D_D3DFMT_A16B16G16R16F です 2160:描画用ABGR浮動小数点32ビット型カラーフォーマットは D_D3DFMT_A32B32G32R32F です 2164:最大テクスチャサイズ 幅:4096 高さ:4096 2168:テクスチャステージテンポラリレジスタ:使用可 2172:減算合成のハードウェア対応:ネイティブ 2174:頂点シェーダーバージョンコード:300 2186:ピクセルシェーダーバージョンコード:300 2265:バックバッファロック転送の時間:3607nsec 一時的な描画可能バッファを使用した転送の時間:1878nsec 2288:バックバッファロックを使用しません 2370:Zバッファを作成します.... 成功 2388:プログラマブルシェーダーを使用します 2497:フォントの初期化を行います 2501:フォントの初期化は正常に終了しました 2503:文字コードバッファの初期化を行います... 完了しました 105120:ウインドウを閉じようとしています 105126:ウインドウが破棄されようとしています 105133:ソフトを終了する準備が整いました 105173:フォントの初期化を行います 105177:フォントの初期化は正常に終了しました 105180:Direct3DDevice9 の解放 3 105216:Direct3D9 DLL の解放 4 105238:DirectInput 関連の終了処理... 完了 105419:DirectSound の終了処理は正常に終了しました 105420: 105422:Alloc memory dump 105423: Total size:0(0.000kb) Alloc num:0 105424: 実はIMEのONとOFFがよくわかってないので今までもONだと思ってました。しかしこれを見るとOFFになっているようですね・・・ OFFの状態でかな入力ならバッファが入ります
Re: MakeKeyInputの入力時に余計な入力データが ( No.7 )
名前:いっち 日時:2011/09/03 19:58

IME が ON の場合(No.3)のテストコードですと、 ウィンドウの右下隅に黒背景に黄字で変換モード(「全角ひらがな」等)が表示されます。
Re: MakeKeyInputの入力時に余計な入力データが ( No.8 )
名前:アリ 日時:2011/09/03 22:11

おお、そうなのですか。それじゃあIMEがONになってます ・・・となると563はなんなのかな
Re: MakeKeyInputの入力時に余計な入力データが ( No.9 )
名前:いっち 日時:2011/09/03 23:32

まとめると、事象は以下のような感じでしょうか? (1) プログラムを起動する。(ソースはNo.03を仮定) ↓ (2) IME を ON にする。入力は「かな入力」モード。(「ローマ字入力」モードでは発生せず) ↓ (3) 'x'キーを押下。(キーは何でも良いがとりあえず) ↓ (4) 'z'キーを押下して SetActiveKeyInput を呼ぶ。 ↓ (5) x=0,y=100の位置に "x"(黒背景に白字) と "つ"(黄背景に黒字) という文字列と入力カーソルが表示される。 少しでも間違っている部分があれば教えてください。
Re: MakeKeyInputの入力時に余計な入力データが ( No.10 )
名前:アリ 日時:2011/09/03 23:43

(5)が少し異なりますね ”つ”はxを何度か押した時でしょうか? とりあえずx一回、一回とすると ”xz”という文字列が黄背景に黒字で表示されます。あと入力カーソルですね zを押すまでに入力したキーが全て黄背景に黒字です
Re: MakeKeyInputの入力時に余計な入力データが ( No.11 )
名前:管理人 日時:2011/09/04 00:03

流れを拝見する限りでは ClearInputCharBuf や SetActiveKeyInput が呼ばれた際に IMEをONの状態で入力されている途中の文字列もリセットされればアリさんのご要望に添えるのかも と勝手に判断して、それを実行してみました よろしければお試しになってみて下さい m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCCTest.exe // Gnu C++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
Re: MakeKeyInputの入力時に余計な入力データが ( No.12 )
名前:アリ 日時:2011/09/04 01:02

おお、管理人さんありがとうございます! 早速組み込んでみたところ余計な文字入力がされなくなりました。 不具合はまだ特に見つかってませんがもし発見したら報告したいと思います。 いっちさんも何度もありがとうございました!
Re: MakeKeyInputの入力時に余計な入力データが ( No.13 )
名前:いっち 日時:2011/09/04 18:24

補足ですが、アリさんは「かな入力」と「IME を ON にして日本語を入力できる状態にする」ことを混同なさっているようです。 実際にはアリさんは「かな入力」を使っておらず、「ローマ字入力」で日本語を入力なさっていると思います。 「かな入力」とは「かなを入力する」事では無く、「かなキーを使って日本語の読みを入力する」事を指します。 「ローマ字入力」は同様に「アルファベットキーを使ってローマ字を表現することで日本語の読みを入力する」事を指します。
Re: MakeKeyInputの入力時に余計な入力データが ( No.14 )
名前:アリ(解決) 日時:2011/09/04 20:22

おお、なるほど・・・確かにローマ字入力していました うーんそういえば本来の「かな入力」は試してなかったな〜。バッファが削除されているなら恐らく大丈夫でしょうが・・・ ついでに解決を付けておきます

Page: 1 |