はじめまして。最近activebasicを使うようになったtotiと申します。
プログラミングのスキルは、ひよっこレベルです。
さて、色々作って遊んでる段階なのですが、IMEのOn/Offを制御することは可能でしょうか?
具体的には、
起動時または、エディットボックスにフォーカスが移ったときにOnにさせたいのですが、
ヘルプをみたり、検索をしても方法が見つかりません。
「activebasicではムリだよ」とか「こんな方法がいいよ」なんて情報を頂けると嬉しいです。
IMEのOn/Offは可能でしょうか
まず以下の関数を定義します。
あとは、例えばエディットボックスを作ってからこんな感じで使用します。
おまけ
ImmGetOpenStatus関数でOn/Offを調べることもできます。
こんな方法でどうですか?
コード: 全て選択
Declare Function ImmGetContext Lib "imm32.dll" (hWnd As HWND) As DWord
Declare Function ImmGetConversionStatus Lib "Imm32.dll" (hIMC As DWord, ByRef lpfdwConversion As DWord, ByRef lpfdwSentence As DWord) As DWord
Declare Function ImmGetOpenStatus Lib "imm32.dll" (hIMC As DWord) As DWord
Declare Function ImmSetOpenStatus Lib "imm32.dll" (hIMC As DWord, fOpen As Long) As DWord
Declare Function ImmReleaseContext Lib "imm32.dll" (hWnd As HWND, hIMC As DWord) As DWord
あとは、例えばエディットボックスを作ってからこんな感じで使用します。
コード: 全て選択
Sub MainWnd_EditBox1_SetFocus()'入力フォーカスを取得した
Dim hImc As DWord
Dim dwConv As DWord, dwSent As DWord
Dim hEdit As HWND
hEdit = GetDlgItem(hMainWnd, EditBox1)
hImc = ImmGetContext(hMainWnd)
ImmGetConversionStatus(hImc, dwConv, dwSent)
ImmSetOpenStatus(hImc, TRUE)'Onにする
ImmReleaseContext(hMainWnd, hImc)
End Sub
Sub MainWnd_EditBox1_KillFocus()'入力フォーカスを失った
Dim hImc As DWord
Dim dwConv As DWord, dwSent As DWord
Dim hEdit As HWND
hEdit = GetDlgItem(hMainWnd, EditBox1)
hImc = ImmGetContext(hMainWnd)
ImmGetConversionStatus(hImc, dwConv, dwSent)
ImmSetOpenStatus(hImc, FALSE)'Offにする
ImmReleaseContext(hMainWnd, hImc)
End Sub
ImmGetOpenStatus関数でOn/Offを調べることもできます。
こんな方法でどうですか?
うまくいきました^‐^
こんにちは。スレ主です。
おかげさまでうまく行きました。
imm32.dll にある関数を使うんですね。
//
ImmGetConversionStatus
も必須ではないっぽいですね。ナシにしてスッキリさせました。
どうも,ありがとうございましたm..m
おかげさまでうまく行きました。
imm32.dll にある関数を使うんですね。
//
ImmGetConversionStatus
も必須ではないっぽいですね。ナシにしてスッキリさせました。
どうも,ありがとうございましたm..m