Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


43276 / 76732 ←次へ | 前へ→

【38506】Re:ユーザーフォームでIMEModeを半角カナなどにす...
発言  sin  - 06/6/5(月) 14:06 -

引用なし
パスワード
   ▼ハト さん:

>>UserForm1のTextBox1のIMEModeを半角カナにして
>
>これだとTextBox1への入力時だけ半角カナになるはずなんですがねえ
>フォームを開く前の入力モードは切り替わらないはずなんです

すいません、どうも再現性の低い質問だったようです。
windowsのバージョン officeのバージョンが違うもの
数台のパソコンで試しましたが、再現したりしなかったりでした。
また、設定するタイミングも
・プロパティウィンドウでIMEModeを設定する場合
・UserFormのInitialize時にIMEModeを設定する場合
・TextBox1のEnter時にIMEModeを設定する場合
でそれぞれ再現性が違いました。


>全く自信はありませんが、
>>UserForm1のTextBox1のIMEModeを半角カナにして
>これが原因だと仮定すると
>フォームに以下のコードを加えて変化があるかどうか・・・
>
>Private Sub UserForm_Initialize()
>  TextBox1.IMEMode = fmIMEModeKatakanaHalf
>End Sub
>
>Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
>  TextBox1.IMEMode = fmIMEModeHiragana
>End Sub

【38426】で頂いたアドバイスで、視界が開けました。
タイミングは違うのですが、まさにその考え方で解決させました

Private Sub TextBox1_Enter()
  TextBox1.IMEMode = 6
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  TextBox1.IMEMode = 4
End Sub

にしました。


ただ、シート上のでのIMEModeの取得・設定の仕方が気になったので、
ついでに調べてみたのですが、

↓これで出来ると信じてた(笑)
>>Public imem As Integer
>>  imem = IMEMode
>>  IMEMode = imem

こうなりました・・・


Option Explicit
Public Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
  (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public Declare Function ImmGetContext Lib "Imm32.dll" (ByVal hwnd As Long) As Long
Public Declare Function ImmReleaseContext Lib "Imm32.dll" (ByVal hwnd As Long, ByVal hIMC As Long) As Long

Public Declare Function ImmGetOpenStatus Lib "Imm32.dll" (ByVal hIMC As Long) As Long
Public Declare Function ImmSetOpenStatus Lib "Imm32.dll" (ByVal hIMC As Long, ByVal fOpen As Long) As Long

Public Declare Function ImmSetConversionStatus Lib "Imm32.dll" _
  (ByVal hIMC As Long, ByVal fdwConversion As Long, fdwSentence As Long) As Long
Public Declare Function ImmGetConversionStatus Lib "Imm32.dll" _
  (ByVal hIMC As Long, lpfdwConversion As Long, lpfdwSentence As Long) As Long

Sub test()
'入力モードの切り替え 「直接」→「ひらがな」→「半角カナ」→・・・
  Dim hwnd As Long
  Dim cime As Long
  Dim simm As Long
  Dim conv As Long
  Dim sent As Long

  hwnd = FindWindow(vbNullString, Application.Caption)
  cime = ImmGetContext(hwnd)
  simm = ImmGetOpenStatus(cime)
  Call ImmGetConversionStatus(cime, conv, sent)

  If simm = 0 Then
    simm = 1
    conv = 25
  ElseIf conv = 25 Then
    conv = 19
  Else
    simm = 0
    conv = 25
  End If

  Call ImmSetConversionStatus(cime, conv, sent)
  Call ImmSetOpenStatus(cime, simm)
  Call ImmReleaseContext(hwnd, cime)

End Sub


こんな方法しかないのでしょうか?
(一通り調べたつもりですが・・・)
WorkbooksとかApplicationあたりのプロパティ
にありそうな気がするんですが・・・

1 hits

【38385】ユーザーフォームでIMEModeを半角カナなどにすると... sin 06/6/1(木) 13:44 質問
【38426】Re:ユーザーフォームでIMEModeを半角カナなどにする... ハト 06/6/2(金) 15:33 発言
【38432】Re:ユーザーフォームでIMEModeを半角カナなどにす... sin 06/6/2(金) 17:15 お礼
【38430】Re:ユーザーフォームでIMEModeを半角カナなどにする... ハト 06/6/2(金) 16:31 発言
【38433】Re:ユーザーフォームでIMEModeを半角カナなどにす... sin 06/6/2(金) 17:36 お礼
【38434】Re:ユーザーフォームでIMEModeを半角カナなどにす... ハト 06/6/2(金) 18:22 発言
【38436】Re:ユーザーフォームでIMEModeを半角カナなどにす... Poteto 06/6/2(金) 20:36 発言
【38441】Re:ユーザーフォームでIMEModeを半角カナなどにす... 漂流民 06/6/2(金) 23:55 発言
【38446】Re:ユーザーフォームでIMEModeを半角カナなどにす... Poteto 06/6/3(土) 8:28 発言
【38489】Re:ユーザーフォームでIMEModeを半角カナなどにす... 漂流民 06/6/4(日) 16:22 発言
【38506】Re:ユーザーフォームでIMEModeを半角カナなどにす... sin 06/6/5(月) 14:06 発言
【38511】Re:ユーザーフォームでIMEModeを半角カナなどにす... ハト 06/6/5(月) 15:46 発言
【38512】Re:ユーザーフォームでIMEModeを半角カナなどにす... ハチ 06/6/5(月) 15:51 発言
【38550】Re:ユーザーフォームでIMEModeを半角カナなどにす... sin 06/6/6(火) 12:17 お礼
【38527】Re:ユーザーフォームでIMEModeを半角カナなどにす... sin 06/6/5(月) 18:40 お礼
【38515】Re:ユーザーフォームでIMEModeを半角カナなどにす... ichinose 06/6/5(月) 16:16 発言
【38551】Re:ユーザーフォームでIMEModeを半角カナなどにす... sin 06/6/6(火) 12:18 お礼

43276 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free