あら。退会しちゃったのか。
折角書いてみたので、後のために晒しておきます。
軽くしか試していないので、ダメなところあるかも知れないです。
それっぽくは動きます。
使う時のクラス名は適宜変えてくださいね。
C#
1using System;
2using System.Runtime.InteropServices;
3using System.Windows.Forms;
C#
1public class TextBoxEx : TextBox
2{
3 [DllImport("User32.dll")]
4 static extern int SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
5 [DllImport("imm32.dll")]
6 static extern IntPtr ImmGetDefaultIMEWnd(IntPtr hWnd);
7
8 const int WM_IME_CONTROL = 0x283;
9 const int IMC_GETCONVERSIONMODE = 1;
10 const int IMC_SETCONVERSIONMODE = 2;
11 const int IMC_GETOPENSTATUS = 5;
12 const int IMC_SETOPENSTATUS = 6;
13
14 const int IME_CMODE_NATIVE = 1;
15 const int IME_CMODE_KATAKANA = 2;
16 const int IME_CMODE_FULLSHAPE = 8;
17 const int IME_CMODE_ROMAN = 16;
18
19 const int CMode_Hiragana = IME_CMODE_ROMAN | IME_CMODE_FULLSHAPE | IME_CMODE_NATIVE;
20 const int CMode_Katakana = IME_CMODE_ROMAN | IME_CMODE_FULLSHAPE | IME_CMODE_KATAKANA | IME_CMODE_NATIVE;
21 const int CMode_KatakanaHarlf = IME_CMODE_ROMAN | IME_CMODE_KATAKANA | IME_CMODE_NATIVE;
22 const int CMode_AlphaFull = IME_CMODE_ROMAN | IME_CMODE_FULLSHAPE;
23
24 private ImeMode ime;
25
26 protected override ImeMode ImeModeBase
27 {
28 get { return base.ImeModeBase; }
29 set
30 {
31 ime = value;
32 base.ImeModeBase = value;
33 }
34 }
35
36 protected override void OnEnter(EventArgs e)
37 {
38 base.OnEnter(e);
39
40 ImeMode = ime;
41
42 var imwd = ImmGetDefaultIMEWnd(Handle);
43
44 switch (ImeMode)
45 {
46 case ImeMode.On:
47 SendMessage(imwd, WM_IME_CONTROL, (IntPtr)IMC_SETOPENSTATUS, new IntPtr());
48 break;
49 case ImeMode.Off:
50 SendMessage(imwd, WM_IME_CONTROL, (IntPtr)IMC_SETOPENSTATUS, IntPtr.Zero);
51 break;
52 case ImeMode.Disable:
53 SendMessage(imwd, WM_IME_CONTROL, (IntPtr)IMC_SETOPENSTATUS, IntPtr.Zero);
54 break;
55 case ImeMode.Hiragana:
56 SendMessage(imwd, WM_IME_CONTROL, (IntPtr)IMC_SETCONVERSIONMODE, (IntPtr)CMode_Hiragana);
57 break;
58 case ImeMode.Katakana:
59 SendMessage(imwd, WM_IME_CONTROL, (IntPtr)IMC_SETCONVERSIONMODE, (IntPtr)CMode_Katakana);
60 break;
61 case ImeMode.KatakanaHalf:
62 SendMessage(imwd, WM_IME_CONTROL, (IntPtr)IMC_SETCONVERSIONMODE, (IntPtr)CMode_KatakanaHarlf);
63 break;
64 case ImeMode.AlphaFull:
65 SendMessage(imwd, WM_IME_CONTROL, (IntPtr)IMC_SETCONVERSIONMODE, (IntPtr)CMode_AlphaFull);
66 break;
67 case ImeMode.Alpha:
68 SendMessage(imwd, WM_IME_CONTROL, (IntPtr)IMC_SETCONVERSIONMODE, (IntPtr)IME_CMODE_ROMAN);
69 break;
70 default:
71 break;
72 }
73 }
74}
退会済みユーザー
2021/03/18 06:58
2021/03/19 03:57
2021/03/19 05:38