FireMonkeyのテキストで、&(アンパサント)文字が表示されない

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

概要

FireMonkeyコントロールのTextプロパティに、&(アンパサント)を含む文字列を代入すると、&が表示されません。

例えば、以下のようなTLabelのTextプロパティに文字列を代入し、コードを実行すると、

Label1.Text:='&1';
Label2.Text:='Some text & number';

以下の図のように&(アンパサント)は表示されません。

Thumbr2000001.png

解説

FireMonkeyのTPresentedTextControlもしくはTTextControlから派生している一部のコントロールにおいて&(アンパサント)は、特殊接頭辞文字として扱われるため、表記には注意が必要です。現在の仕様では、Textプロパティに文字列を代入する際、TextControlの内部でDelAmpメソッドを呼び出して、&(アンパサント)を明示的に削除するため、表示されません。

以下は、&(アンパサント)が表示されないFireMonkeyコントロールの一例です。

  • TLabel
  • TCustomButton
  • TCheckBox
  • TRadioButton
  • TGroupBox
  • TMenuItem
  • TExpander
  • TTabItem
  • TTreeViewItem

解決

10 Seattle以降のバージョンでは、TPresentedTextControlもしくはTTextControlから派生しているコントロールは、 PrefixStyleというプロパティを持っています。TPrefixStyle.NoPrefixを設定することによって、&(アンパサント)が表示できます。(PrefixStyleのデフォルト値は、TPrefixStyle.HidePrefix)

以下は、そのコード例です。

Label1.PrefixStyle:= TPrefixStyle.NoPrefix;
Label1.Text:='&1';
Label2.PrefixStyle:= TPrefixStyle.NoPrefix;
Label2.Text:='Some text & number';

10 Seattle以前のバージョンでは、PrefixStyleプロパティは無いため、&(アンパサント)を表示させる場合のコード例は、以下の通りです。

Label1.Text:='&&1';
Label2.Text:='Some text && number';

但し、このコードでは&(アンパサント)を特殊接頭辞文字として扱わないクラス、またはコントロールへそのまま文字列を代入すると支障が出るため、必ずDelAmpメソッドを呼び出してください。

以下は、TLabelの文字列をTMemoへ挿入する場合のコード例です。

Label1.Text:='&&1';
Label2.Text:='Some text && number';
Memo1.Lines.Add(DelAmp(Label1.Text));
Memo1.Lines.Add(DelAmp(Label2.Text));