掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Window10でTEditorコンポーネントのキャレットが消える問題への対応 (ID:149686)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
先日より、以下のコードで動作を確認しておりましたが、違和感のない動作を 確認できました。(既存の変数を使って条件判定を行うこととしました。短時間 ではありますが、新旧IMEのみならず、ATOK2017、最新のGoogleIMEでも使って みて、違和感のない動作となっていることを確認しました。) そのため本件については一旦解決とさせていただきたいと思います。 ご多忙にも関わらず貴重なご助言等をくださった皆様、誠にありがとうござい ました。本当に助かりました。改めて深く御礼申し上げます。 ※フィードバックHubには、ドキュメントどおりIMN_CloseCandidateのメッセージ が飛ばないのはバグの一種ではありませんか?というコメントを投稿させていた だきました。すぐに治るとは思いませんが、近い将来、本来あるべき形に戻って もらえるとよいなと思います。 procedure TEditor.WMImeComposition(var Msg: TMessage); var Imc: HIMC; L: Integer; S: String; begin inherited; // WM_IME_CHAR メッセージが発行され、IME 文字列長分の WM_CHAR が // Windows の DefWindowsProc によってポストされる。 if (Msg.LParam and GCS_RESULTSTR <> 0) then begin if not FReadOnly then begin Imc := ImmGetContext(Handle); L := ImmGetCompositionString(Imc, GCS_RESULTSTR, nil, 0); SetLength(S, L + 1); ImmGetCompositionString(Imc, GCS_RESULTSTR, PChar(S), L + 1); ImmReleaseContext(Handle, Imc); SetLength(S, L); FImeCount := L; PutStringToLine(S); end; SendMessage(Handle, WM_IME_NOTIFY, IMN_CLOSECANDIDATE, 0); end else if Msg.LParam = 0 then begin SendMessage(Handle, WM_IME_NOTIFY, IMN_CLOSECANDIDATE, 0); end; end; procedure TEditor.WMImeNotify(var Msg: TMessage); begin inherited; if Msg.WParam = IMN_OPENCANDIDATE then begin if FCaretUpdateCount = 0 then CaretBeginUpdate; end else if Msg.WParam = IMN_CLOSECANDIDATE then begin if FCaretUpdateCount = 1 then CaretEndUpdate; end; end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.