掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Window10でTEditorコンポーネントのキャレットが消える問題への対応 (ID:149669)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
au様、改めてのご助言、誠にありがとうございます。本当に心強く感じております。 先に書いたコードなのですが、 if (Msg.LParam and GCS_RESULTSTR <> 0) and not FReadOnly then という条件文にあるとおり、ReadOnlyを設定していたときにもスルーされてしまう (キャレットが消えてしまう)という問題があります。ご助言いただいた「変換をキ ャンセルしたとき」や「ReadOnlyが設定されていたとき」などにも必ず処理が行われ るよう、追加した一文の位置をIF文の外に記述しなおしました。これが良好に動作する か、少し時間をとって動作検証をしてみたいと思います。 ※まだ試行錯誤のところもございますので、大変恐縮ですが、お気づきの点等ござい ましたら、ご助言をお願いできれば幸いです。 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) and 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; while FCaretUpdateCount > 0 do CaretEndUpdate; // IF文の外に配置。ここなら変換キャンセル時やReadOnly時にも処理される。 end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.