フリガナ取得             <TOP>


変換中の文字列の情報を取得します。住所録などの作成においては必要不可欠

ImmGetCompositionString 変換中の文字列を取得

ImmGetContext IMEのコンテキストを取得

ImmReleaseContext IMEのコンテキストを解放

 

フォームにエディットボックス、テキストボックス、コマンドボタンを2個貼り付けます。

エディットボックス内で文字列を仮名漢字変換しコマンドボタン1をクリックするとテキストボックスにフリガナが入ります。

コマンドボタン2は表示ボックス内をクリアし、再度エディットボックスに入力を促します。

 

'================================================================
'= フリガナ取得
'=    (Hurigana.bas)
'================================================================
#include"Windows.bi"

' 変換中の文字列の情報を取得
Declare Function Api_ImmGetCompositionString& Lib "imm32" Alias "ImmGetCompositionStringA"(ByVal hIMC&, ByVal dwIndex&, ByVal lpBuf$, ByVal dwBufLen&)

' 指定のウィンドウの入力コンテキストのハンドルを取得
Declare Function Api_ImmGetContext& Lib "imm32" Alias "ImmGetContext"(ByVal hWnd&)

' 入力コンテキストのハンドルを解放。
Declare Function Api_ImmReleaseContext& Lib "imm32" Alias "ImmReleaseContext"(ByVal hWnd&, ByVal hIMC&)

#define GCS_RESULTREADSTR &H200         '最後に変換を行った際に入力された文字列を1バイトカタカナで表した文字列をbufに返す
#define vbNullString ByVal 0            '値0の文字列。値0を持つ文字列。空文字列ではない
#define vbNullChar Chr$(0)              'NULL文字(\0)

Var Shared Text1 As Object
Var Shared Edit1 As Object
Var Shared Button1 As Object
Var Shared Button2 As Object

Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14
Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14
Button2.Attach GetDlgItem("Button2") : Button2.SetFontSize 14

'================================================================
'= 
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Text1.SetWindowText ""
    Edit1.SetWindowText ""
    Edit1.SetFocus
End Sub

'================================================================
'= フリガナ取得
'================================================================
Declare Sub Button1_On edecl ()
Sub Button1_On()
    Var hImc As Long
    Var hWnd As Long
    Var nSize As Long
    Var Buff As String
    Var Ret As Long

    hWnd = Edit1.GethWnd
    hImc = Api_ImmGetContext(hWnd)
    nSize = Api_ImmGetCompositionString(hImc, GCS_RESULTREADSTR, vbNullString, 0)
    Buff = String$(nSize, vbNullChar)

    Ret = Api_ImmGetCompositionString(hImc, GCS_RESULTREADSTR, Buff, Len(Buff))
    Text1.SetWindowText Buff
    Ret = Api_ImmReleaseContext(hWnd, hImc)
End Sub

'================================================================
'= クリア
'================================================================
Declare Sub Button2_On edecl ()
Sub Button2_On()
    Text1.SetWindowText ""
    Edit1.SetWindowText ""
    Edit1.SetFocus
End Sub

'================================================================
'= イベントループ
'================================================================
While 1
    WaitEvent
Wend
Stop
End