Делаем как обычно, если надо переопределить какое-то событие окна
interface
uses
{$IFDEF MSWINDOWS}
Winapi.Windows, Winapi.Messages,
FMX.Platform.Win,
{$ENDIF}
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs;
type
TMainForm = class(TForm)
private
procedure CreateHandle; override;
{$IFDEF MSWINDOWS}
procedure WMIMENotify(var Msg: TMessage); message WM_IME_NOTIFY;
{$ENDIF}
public
end;
var
MainForm: TMainForm;
implementation
{$R *.fmx}
{$IFDEF MSWINDOWS}
var
OldWndProc: Pointer = nil;
function NewWndProc(Wnd: HWND; Msg: UINT; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall;
var
Mess : TMessage;
begin
case Msg of
WM_IME_NOTIFY:
begin
Mess.Msg := Msg;
Mess.WParam := wParam;
Mess.lParam := lParam;
Mess.Result := 0;
MainForm.Dispatch(Mess);
Result := Mess.Result;
end;
else
Result := CallWindowProc(OldWndProc, Wnd, Msg, WParam, LParam);
end;
end;
{$ENDIF}
{ TMainForm }
procedure TMainForm.CreateHandle;
begin
inherited CreateHandle;
{$IFDEF MSWINDOWS}
OldWndProc:= Pointer(SetWindowLong(WindowHandleToPlatform(Handle).Wnd, GWL_WNDPROC, Integer(@NewWndProc)));
{$ENDIF}
end;
{$IFDEF MSWINDOWS}
procedure TMainForm.WMIMENotify(var Msg: TMessage);
begin
{что-то делаем}
end;
{$ENDIF}