暫定版です。

OS X で IME モードをどうにかする方法を調べてみたのですが、よくわからなかったのでローテクで回避しました。"ことえり" の文字種変更ショートカットのキーコードを送信するというやり方です。
uses ... {$IFDEF MSWINDOWS}, Vcl.Controls, FMX.Platform.Win{$ENDIF} {$IFDEF MACOS}, Macapi.CoreGraphics, Macapi.CocoaTypes, Macapi.CoreFoundation{$ENDIF};
procedure TfrmMain.SetIMEMode_Provisional(Mode: FMX.Types.TImeMode); // IM(E) モードを変更する (暫定) {$IFDEF MACOS} const kVK_ANSI_J = $26; kVK_ANSI_K = $28; kVK_ANSI_Semicolon = $29; {$ENDIF} var {$IFDEF MSWINDOWS} dMode: Vcl.Controls.TImeMode; {$ENDIF} {$IFDEF MACOS} Src: CGEventSourceRef; EventUp, EventDown: CGEventRef; {$ENDIF} begin {$IFDEF MSWINDOWS} if Mode <> FMX.Types.TImeMode.imDontCare then begin case Mode of FMX.Types.TImeMode.imClose: dMode := imClose; FMX.Types.TImeMode.imOpen: dMode := imOpen; FMX.Types.TImeMode.imSAlpha: dMode := imSAlpha; FMX.Types.TImeMode.imAlpha: dMode := imAlpha; FMX.Types.TImeMode.imHira: dMode := imHira; FMX.Types.TImeMode.imSKata: dMode := imSKata; FMX.Types.TImeMode.imKata: dMode := imKata; FMX.Types.TImeMode.imHanguel: dMode := imHanguel; FMX.Types.TImeMode.imSHanguel: dMode := imSHanguel; else dMode := imDisable; end; SetImeMode(FmxHandleToHWND(Self.Handle), dMode); end; {$ENDIF} {$IFDEF MACOS} Src := CGEventSourceCreate(kCGEventSourceStateCombinedSessionState); case Mode of FMX.Types.TImeMode.imHira: begin // Ctrl + Shift + J のキーイベントを生成 (ことえりのひらがなモードショートカット) EventDown := CGEventCreateKeyboardEvent(Src, kVK_ANSI_J, Integer(True)); CGEventSetFlags(EventDown, kCGEventFlagMaskControl or kCGEventFlagMaskShift); EventUp := CGEventCreateKeyboardEvent(Src, kVK_ANSI_J, Integer(False)); CGEventSetFlags(EventUp, kCGEventFlagMaskControl or kCGEventFlagMaskShift); end; FMX.Types.TImeMode.imKata: begin // Ctrl + Shift + K のキーイベントを生成 (ことえりのカタカナモードショートカット) EventDown := CGEventCreateKeyboardEvent(Src, kVK_ANSI_K, Integer(True)); CGEventSetFlags(EventDown, kCGEventFlagMaskControl or kCGEventFlagMaskShift); EventUp := CGEventCreateKeyboardEvent(Src, kVK_ANSI_K, Integer(False)); CGEventSetFlags(EventUp, kCGEventFlagMaskControl or kCGEventFlagMaskShift); end; else // Ctrl + Shift + ; のキーイベントを生成 (ことえりの英数モードショートカット) EventDown := CGEventCreateKeyboardEvent(Src, kVK_ANSI_Semicolon, Integer(True)); CGEventSetFlags(EventDown, kCGEventFlagMaskControl or kCGEventFlagMaskShift); EventUp := CGEventCreateKeyboardEvent(Src, kVK_ANSI_Semicolon, Integer(False)); CGEventSetFlags(EventUp, kCGEventFlagMaskControl or kCGEventFlagMaskShift); end; CGEventPost(kCGSessionEventTap, EventDown); CGEventPost(kCGSessionEventTap, EventUp ); CFRelease(EventUp ); CFRelease(EventDown); CFRelease(Src); {$ENDIF} end;
See Also:
[[FMX] ImeMode does not work (with Japanese IME)]
http://qc.embarcadero.com/wc/qcmain.aspx?d=105723
|