VB.NETにて、テキストボックスに入力された(氏名)のカタカナを
他のテキストボックスに自動で表示したいのです。
6.0の時は、APIを使用しIMM32より取得できましたが
.NETでは、AS ANY は使用できない。
'*********************************************
' 変換文字列に関する情報を取得する関数の宣言
Declare Function ImmGetCompositionString _
Lib "imm32.dll" _
Alias "ImmGetCompositionStringA" _
(ByVal hIMC As Long, _
ByVal dwIndex As Long, _
lpBuf As Any, _ '<-------------ここ
ByVal dwBufLen As Long) As Long
'*********************************************
strBuffer の固定長バッファもエラーになります。
'*********************************************
Private Sub txt氏名_Change(Index As Integer)
Dim lngImeContext As Long
Dim strBuffer As String * 256 '<-----
Dim strFurigana As String
Dim lngResult As Long
' 入力コンテキストを取得
lngImeContext = _
ImmGetContext(txt氏名(Index).hWnd)
' 変換文字列に関する情報を取得
lngResult = _
ImmGetCompositionString( _
lngImeContext, _
GCS_RESULTREADSTR, _
ByVal strBuffer, _
Len(strBuffer))
' 入力コンテキストを解放
lngResult = _
ImmReleaseContext( _
txt氏名(Index).hWnd, _
lngImeContext)
' 取得した文字列からNull文字を削除
strFurigana = Replace(strBuffer, vbNullChar, "")
' 取得した文字列からスペースを削除
strFurigana = Replace(strFurigana, " ", "")
' 結果を表示
If strFurigana <> カナ退避 Then
txtカナ(Index).Text = txtカナ(Index).Text & strFurigana
カナ退避 = strFurigana
End If
End Sub
'***********************************************
よろしくお願いいたします。
私はVB6.0でAnyも固定長文字列も使用しないで使っていますが。
Declare Function ImmGetCompositionString _
Lib "imm32.dll" Alias "ImmGetCompositionStringA" _
(ByVal hImc As Long, ByVal dw As Long, ByVal lpv As String, ByVal dw2 As Long) _
As Long
.NETならLongをIntegerにすればイイかと。
nanashiさんありがとうございます。
Integerにしてもだめです。
Ipv = Nothing です。
簡単に試しましたが下記で出来ました。
.NETはまだ不慣れなんで書き方は微妙ですが…。
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
Dim hWnd, hImc, iLen As Integer
Dim sBuff As String
hWnd = CType(sender, TextBox).Handle.ToInt32
hImc = ImmGetContext(hWnd)
iLen = ImmGetCompositionString(hImc, GCS_RESULTREADSTR, vbNullChar, 0) + 1
sBuff = Space(iLen)
Call ImmGetCompositionString(hImc, GCS_RESULTREADSTR, sBuff, iLen)
Call ImmReleaseContext(hWnd, hImc)
Label1.Text = sBuff
End Sub
nanashiさんありがとうございます。
おかげさまで解決しました。
本当に良い掲示板ですね。
これからもお世話になります。
ありがとうございました。