TEdit/TMemoコンポーネントのReadOnly=Trueに設定しても、フォーカス時にIMEが有効になる

提供: Support
移動先: 案内検索

対象となる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の適用方法は、以下のドキュメントを参照してください。