TEdit/TMemoコンポーネントのReadOnly=Trueに設定しても、フォーカス時にIMEが有効になる
対象となるIDEのバージョン
- RAD Studio/C++Builder 10 Seattle以降
問題
TEditやTMemoなど、TCustomEditから派生しているコンポーネントに以下の設定を行います。
- ReadOnlyプロパティをTrueに設定
- ImeModeプロパティをimClose、imDisable以外に設定(例えば、imHiraなど)
本来の動作はReadOnly=Trueの場合、フォーカス時にIMEが無効になり、文字入力はできませんが、
10 Seattle以降のバージョンでは、フォーカス時にIMEが使用可能で、文字が入力できるという症状が発生します。
(ただし実際の動作は、未確定の文字入力が行えますが、確定した文字はTEdit/TMemoのテキストには反映されません。)
解決
この症状は、10.4.1で修正済みです。
なお、10.1〜10.3のバージョンで、この問題を解決したい場合は、<製品のインストールフォルダ>¥source¥vcl¥Vcl.StdCtrls.pasを自身のプロジェクトフォルダへコピーし、修正してください。
修正箇所は以下の通りです。
Vcl.StdCtrls.pas
修正前:
procedure TCustomEdit.UpdateTIPStatus;
begin
// If Memo/Edit control is ReadOnly, Force close TIP(on-screen keyboard)
// otherwise, use standard behavior.
if ReadOnly then SetTextInputPanelStatus(Self, False)
else
inherited UpdateTIPStatus;
end;
修正後:
procedure TCustomEdit.UpdateTIPStatus;
begin
// If Memo/Edit control is ReadOnly, Force close TIP(on-screen keyboard)
// otherwise, use standard behavior.
if ReadOnly then
SetTextInputPanelStatus(Self, False)
else
inherited UpdateTIPStatus;
if ReadOnly then
if WindowHandle <> 0 then
SendMessage(WindowHandle, EM_SETREADONLY, Ord(True), 0);
end;
修正したVcl.StdCtrls.pasの適用方法は、以下のドキュメントを参照してください。