FireMonkeyのテキストで、&(アンパサント)文字が表示されない
概要
FireMonkeyコントロールのTextプロパティに、&(アンパサント)を含む文字列を代入すると、&が表示されません。
例えば、以下のようなTLabelのTextプロパティに文字列を代入し、コードを実行すると、
Label1.Text:='&1';
Label2.Text:='Some text & number';
以下の図のように&(アンパサント)は表示されません。
解説
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));