VisualBasic 6.0で開発しております。例えば年賀状作成ソフトなどに良く付いているもので…

(1)あるテキストボックスに「霧島」と仮名入力して漢字変換する。
(2)すると「キリシマ」と表示されると同時に、別のテキストボックスには「キリシマ」とフリガナが表示される。
(3)続けて入力したときは、さらにフリガナが後ろに付け加えられる。
…と、いったフリガナの自動表示機能をVBのテキストボックスで実現するにはどうしたらよいでしょうか。こちら(http://www.winapi-database.com/tips/15/)も良かったのですが、一度Enterキーを押すと表示部がクリアされてしまい、続けて入力したときには続けて表示されません。

回答の条件
  • 1人3回まで
  • 登録:2007/02/23 22:21:16
  • 終了:2007/02/25 00:29:57

回答(2件)

id:TONTON3 No.1

TONTON3回答回数212ベストアンサー獲得回数42007/02/23 23:06:34

ポイント5pt

フリガナの内容を変数に持ってちゃだめなんでしょうか?

id:kurikurimaron

変数を設けて文字列を結合するようにしてみたのですが、2回同じところを通るせいか、同じフリガナが繰り返されてしまうんですよね…

2007/02/24 23:30:53
id:llusall No.2

llusall回答回数505ベストアンサー獲得回数612007/02/24 00:00:13

ポイント65pt

http://www.winapi-database.com/tips/15/

を改修しました。


以下のようにテキストボックスを配置します。

名前も同じにしてください。

ふりがな| txtKana |
文字  | txtMoji |
    | txtDummy |


フォームの内容を以下のように記述します。

Option Explicit

Const GCS_RESULTREADSTR = &H200


Private Sub Form_Load()

    Me.txtMoji.Text = ""

    Me.txtKana.Text = ""

    Me.txtDummy.Text = ""

    Me.txtMoji.IMEMode = 1

    txtDummy.Visible = False

End Sub


Private Sub txtMoji_KeyDown(KeyCode As Integer, Shift As Integer)

    If Shift <> 0 Then Exit Sub

    Dim hContext As Long

    Dim nSize As Long

    Dim A As String

    Dim rc As Long

    hContext = ImmGetContext(Me.hWnd)

    nSize = ImmGetCompositionString(hContext, GCS_RESULTREADSTR, vbNullString, 0)

    A = String(nSize, Chr(0))

    rc = ImmGetCompositionString(hContext, GCS_RESULTREADSTR, A, nSize)

    rc = ImmReleaseContext(Me.hWnd, hContext)

    txtDummy.Text = Left(A, nSize)

End Sub


Private Sub txtDummy_Change()

    txtKana.SelStart = Len(txtKana.Text)

    txtKana.SelText = txtDummy.Text

    txtKana.SelStart = Len(txtKana.Text)

End Sub

※標準モジュールはそのままとします。

id:kurikurimaron

ありがとうございます。できました。

ダミーをうまく使うのがミソのようですねー。

2007/02/25 00:16:19

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません