トップページ > 過去ログ > 記事閲覧
全角文字の入力(解決)
名前:南山まさかず 日時: 2012/02/06 18:33

 Ver.3.07a、早速使わせていただきました。  そこでバグ?報告なのですが。  以下のコードで全角文字の入力時に、入力中の文 字列が表示されなくなりました。 void TextBox::SetText(Func func){ String=Tstring(); SetDrawScreen(DX_SCREEN_BACK); int Handle=MakeKeyInput(STRINGSIZEMAX,FALSE,FALSE,FALSE); SetActiveKeyInput(Handle); for(;;){ if(func()){ break; }Draw(); DrawKeyInputString(x,y,Handle); ScreenCopy(); if(DxLib::CheckKeyInput(Handle)){ break; } }TCHAR ch[STRINGSIZEMAX+1]; GetKeyInputString(ch,Handle); DeleteKeyInput(Handle); String=ch; }  funcには終了条件のチェックなどを行う関数のポ インタを渡しており、描画処理は行っておりませ ん。半角文字ですと入力中の文字列は表示されまし た。  全角文字入力中、関連の一切の描画(カーソル、 変換候補等)が表示されません。  僕のところだけでしょうか?  

Page: 1 |

追記 ( No.1 )
名前:南山まさかず 日時:2012/01/30 20:55

 コードの頭に template<typename Func> を追加するのを忘れていました。  あと、Tstringは typedef basic_string<TCHAR> Tstring です。
Re: 全角文字の入力 ( No.2 )
名前:いっち 日時:2012/01/30 21:49

MakeKeyInput のサンプルではどのようになりますか? > h t t p://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_input.html#R5N13
Re: 全角文字の入力 ( No.3 )
名前:南山まさかず 日時:2012/01/31 15:49

 いっちさん、ありがとうございます。  サンプルでも全角文字列入力の描画がされません でした。  入力中の描画がなされないだけで、入力や変換は きちんとされているようです。  なお、追加報告として、今朝家のXPで実行してみ たところ、以前と同じくきちんと表示されました。 今学校の7で今朝と全く同じバイナリを実行してみた ところ、報告したとおり、描画がされませんでし た。  どうやら、Windowsのバージョンに関係があるよう です。
追加 ( No.4 )
名前:南山まさかず 日時:2012/01/31 15:58

 もしかして戻り値はちゃんと異常値を返しているのかとも思い、以下のようにサンプルコードを改変して実行してみました。 #include "DxLib.h" #include<stdexcept> using namespace std; int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){ try{ char String[ 256 ] ; int InputHandle ; // DXライブラリの初期化 if( DxLib_Init() == -1 ) return -1 ; // 描画先を裏にする SetDrawScreen( DX_SCREEN_BACK ) ; // キー入力ハンドルを作る(キャンセルなし全角文字有り数値入力じゃなし) InputHandle = MakeKeyInput( 50 , FALSE , FALSE , FALSE ) ; // 作成したキー入力ハンドルをアクティブにする SetActiveKeyInput( InputHandle ) ; // キー入力終了待ちループ // (ProcessMessageをループごとに行う) while( !ProcessMessage() ) { // 入力が終了している場合は終了 if( CheckKeyInput( InputHandle ) != 0 ) break ; // 画面の初期化 ClearDrawScreen() ; // 入力モードを描画 if(DrawKeyInputModeString( 640 , 480 ) ){throw exception("");} // 入力途中の文字列を描画 if(DrawKeyInputString( 0 , 0 , InputHandle ) ){throw exception("");} // 裏画面の内容を表画面に反映させる ScreenFlip() ; } // 入力された文字列を取得 GetKeyInputString( String , InputHandle ) ; // 用済みのインプットハンドルを削除する DeleteKeyInput( InputHandle ) ; // 画面の初期化 ClearDrawScreen() ; // 入力された文字列を画面に表示する DrawString( 0 , 0 , "あなたが入力した文字列は" , GetColor( 255 , 255 , 255 ) ) ; DrawString( 0 , 16 , String , GetColor( 255 , 255 , 255 ) ) ; // 裏画面の内容を表画面に反映させる ScreenFlip() ; // キー入力待ち WaitKey() ; // DXライブラリの使用終了 DxLib_End() ; // 終了 return 0 ; }catch(exception & e){ return -1; } }  結論から言うと、戻り値は正常で、例外はスローされませんでした。
Re: 全角文字の入力 ( No.5 )
名前:管理人 日時:2012/02/06 02:59

ご報告ありがとうございます、同様の現象を Win7 環境で確認しました 何故か Win7 では XP 環境では飛んでくる「全角入力機能のON/OFF状態が変化した」という 情報が飛んでこないようです ライブラリ側の使い方にどこか誤りがある可能性もありますが、とりあえず「入力している」という情報自体は 飛んでくるので、応急処置的に「全角入力が開始された」という情報が飛んできたときに 「全角入力機能がONされた」として、「全角入力が完了した」という情報が飛んできたときに 「全角入力機能がOFFされた」とすることでとりあえず入力時の文字列が見えるようにしました その変更を加えたバージョンをアップしましたので、よろしければお試しになってみてください 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 // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMinGWTest.exe // MinGW 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
Re: 全角文字の入力 ( No.6 )
名前:南山まさかず 日時:2012/02/06 18:06

 対応ありがとうございます。無事動作を確認しました。

Page: 1 |