IMEの初期方式を設定          <TOP>


IMEの初期方式を設定します。

ImmGetContext ウィンドウに関連付けされた入力コンテキストを取得

ImmReleaseContext ウィンドウに関連付けされた入力コンテキストを開放

ImmGetOpenStatus IMEのオープン状態を取得

ImmSetOpenStatus IMEのオープン状態を設定

ImmSetConversionStatus 現在の変換状態を設定

 

「ひらがな」を設定した場合

 

「全角カタカナ」を設定した場合

 

 

'================================================================
'= IMEの初期方式を設定
'=    (ImmSetConversionStatus.bas)
'================================================================
#include "Windows.bi"

' ウィンドウに関連付けされた入力コンテキストを取得
Declare Function Api_ImmGetContext& Lib "imm32" Alias "ImmGetContext" (ByVal hWnd&)

' ウィンドウに関連付けされた入力コンテキストを開放
Declare Function Api_ImmReleaseContext& Lib "imm32" Alias "ImmReleaseContext" (ByVal hWnd&, ByVal hIMC&)

' IMEのオープン状態を取得
Declare Function Api_ImmGetOpenStatus& Lib "imm32" Alias "ImmGetOpenStatus" (ByVal hIMC&)

' IMEのオープン状態を設定
Declare Function Api_ImmSetOpenStatus& Lib "imm32" Alias "ImmSetOpenStatus" (ByVal hIMC&, ByVal fOpen&)

' 現在の変換状態を設定
Declare Function Api_ImmSetConversionStatus& Lib "imm32" Alias "ImmSetConversionStatus" (ByVal hIMC&, ByVal fdwConversion&, ByVal fdwSentence&)

' 入力モードを示す定数の宣言
#define IME_CMODE_CHARCODE &H20         '文字コード入力
#define IME_CMODE_CHINESE &H1           'NATIVEモード(設定しない場合ALPHANUMERICモード)
#define IME_CMODE_EUDC &H200            'EUDC変換モード
#define IME_CMODE_FULLSHAPE &H8         '全角モード(設定しないとき、半角モード)
#define IME_CMODE_HANGEUL &H1           'NATIVEモード(設定しない場合ALPHANUMERICモード)
#define IME_CMODE_HANJACONVERT &H40     'HANJA変換モード
#define IME_CMODE_JAPANESE &H1          'NATIVEモード(設定しない場合ALPHANUMERICモード)
#define IME_CMODE_KATAKANA &H2          'カタカナモード(設定しない場合ひらがなモード)
#define IME_CMODE_LANGUAGE &H3          '
#define IME_CMODE_NATIVE &H1            'NATIVEモード(設定しない場合ALPHANUMERICモード)
#define IME_CMODE_NOCONVERSION &H100    '変換しない(設定しないとき、変換する)
#define IME_CMODE_ROMAN &H10            'ローマ字変換モード
#define IME_CMODE_SOFTKBD &H80          'ソフトキーボードモード
#define IME_CMODE_SYMBOL &H400          'シンボルモード
#define IME_CONFIG_GENERAL 1            '
#define IME_CONFIG_REGISTERWORD 2       '
#define IME_CONFIG_SELECTDICTIONARY 3   '

' 変換モードを示す定数の宣言
#define IME_SMODE_AUTOMATIC &H4         '自動モードで変換
#define IME_SMODE_NONE &H0              'センテンスに関する情報はなし
#define IME_SMODE_PHRASEPREDICT &H8     '次の文字を予想するためにフレーズ情報を使う
#define IME_SMODE_PLURALCLAUSE &H1      '変換のための複文情報を使う
#define IME_SMODE_SINGLECONVERT &H2     '単漢字変換する

Var Shared Text1 As Object
Var Shared Text2 As Object
Var Shared Edit1 As Object
Var Shared Combo1 As Object
Var Shared Button1 As Object

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

Var Shared iStatus(4) As Long

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Combo1.AddString "ひらがな"
        iStatus(0) = IME_CMODE_FULLSHAPE Or IME_CMODE_JAPANESE
    Combo1.AddString "全角カタカナ"
        iStatus(1) = IME_CMODE_FULLSHAPE Or IME_CMODE_LANGUAGE
    Combo1.AddString "半角カタカナ"
        iStatus(2) = IME_CMODE_LANGUAGE
    Combo1.AddString "全角英数字"
        iStatus(3) = IME_CMODE_FULLSHAPE
    Combo1.AddString "半角英数字"
        iStatus(4) = IME_CMODE_ALPHANUMERIC
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var hIMC As Long
    Var ConversionStatus As Long
    Var SentenceStatus As Long
    Var Ret As Long

    'ウィンドウに関連付けされた入力コンテキストを取得
    hIMC = Api_ImmGetContext(GethWnd)

    '入力コンテキストを取得できたときは
    If hIMC <> 0 Then

        'IMEのオープン状態でないときは
        If Api_ImmGetOpenStatus(hIMC) <> Not False Then

            'IMEをオープン
            Ret = Api_ImmSetOpenStatus(hIMC, Not False)

            '初期入力モードを指定
            ConversionStatus = iStatus(Combo1.GetCursel)

            '初期変換モードを指定
            SentenceStatus = IME_SMODE_PHRASEPREDICT

            'IMEの初期方式を設定
            Ret = Api_ImmSetConversionStatus(hIMC, ConversionStatus, SentenceStatus)

            'IMEをクローズ
            Ret = Api_ImmSetOpenStatus(hWnd, False)
        End If

        '入力コンテキストを開放
        Ret = Api_ImmReleaseContext(GethWnd, hIMC)
    End If

    SetImeMode 1
    Edit1.SetFocus
End Sub

'================================================================
'=
'================================================================
Declare Sub Edit1_SetFocus edecl ()
Sub Edit1_SetFocus()
    Edit1.SetSelText 0, 0
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End