InputString.dllは文字入力機能を扱うライブラリ。 IMEも使えて便利。
InputString.hllを参考に。
コンポジションウィンドウ(入力してるときに出る枠とかのあれ)のフォント設定を行う。
void SetFont(int nSize, string pIName, int nWeight);
フォントサイズを指定。
フォント名を指定。
フォントの太さを数値で指定。 ただし、0・400・700しか動かないはず(APIのCreateFontとかが確かそうなので)
とりあえずSACT2では
const int FW_NORMAL = 400;
が定義されているのでこれを使う。
const int FW_BOLD = 700;
コンポジションウィンドウの位置を設定する。
void SetPos(int nX, int nY);
ウィンドウ上端からの距離。
ウィンドウ左端からの距離。
入力モードを開始する。
void Begin(void);
入力モードを終了する。
void End(void);
IMEを起動する。
void OpenIME(void);
IMEを止める。
void CloseIME(void);
確定文字列を取得する。
string GetResultString(void);
バッファに確定文字列があった場合それが返り、無い場合は空白文字列が返る。
確定文字列のバッファをクリアする。
void ClearResultString(void);
InputString_SACT2サンプル.jafを基に作成。 InputString.dllは「InputString」で登録してあるということで。
最低限の流れはこういう感じ。
string str; // 入力文字列を入れる変数
InputString.SetFont(64, "MS ゴシック", FW_NORMAL); // 入力中の文字を大きさ64のMSゴシックに
InputString.SetPos(0, 0);
InputString.Begin(); // 開始
InputString.OpenIME();
str = InputString.GetResultString(); // 確定文字列を取得
InputString.CloseIME();
InputString.End(); // 終了
system.MsgBox(str); // テスト用。「system.Output(str);」でも
でもこれをビルドしてもうまく動かない。 入力する間もなく空っぽのメッセージボックスが表示されて終わり。
GetResultString関数は「入力作業が終わるまで待ち、文字列が確定したらそれを返す」というわけではなく、関数を呼び出した時点で確定文字列があってもなくても即座に返ってくるという動作です。 だから、常に関数を呼び出し続けて入力があったかどうかを確認し続けないとダメと。 InputString_SACT2サンプル.jafの無限ループは削除機能とかのためじゃないのです。
というわけでGetResultString関数周りをちょっと書き換え。
for(;;)
これで入力ができるはずです。
{
string result;// 一度の確定ごとに文字列を入れる変数
if (KEY_IS_DOWN(VK_RETURN)) break;// 入力終了
result = InputString.GetResultString();
//文字数を調べて確定文字列が入っているかチェックする。
//入っていればそれを変数strの末尾に追加する。
if(result.Length() > 0)str += result;
}
InputString_SACT2サンプル.jafを基にちょっといじってみたものがこれ。ご自由に。