为什么 Firemonkey 组合中缺少 & 符号?

t j*_*t j 5 delphi combobox firemonkey

当您创建 Delphi 项目并添加组合框并设置ComboBox1.Items.Add('Zebra & Zulu')时,当您下拉列表时,它会显示“Zebra & Zulu”。完美的。

当您创建 Firemonkey 项目并添加组合框或组合编辑并设置ComboBox1.Items.Add('Zebra & Zulu')ComboEdit1.Items.Add('Zebra & Zulu') 时,它显示“Zebra Zulu”(不显示&符号)当您下拉列表时。但是,当您使用组合编辑选择它时,文本字段部分显示“Zebra & Zulu”。只是很奇怪。

现在有一个解决办法(某种程度上),但对我来说这是值得怀疑的。添加第二个 & 符号,下拉列表将显示该 & 符号。但是,添加第二个 & 符号会显示在组合编辑文本字段部分。坏的。

我的问题是你能强制这些组合控件下拉列表显示&符号吗?为什么首先缺少 & 符号?

J..*_*... 2

这似乎是 VCL 加速键处理遗留下来的内置行为。似乎没有办法用样式或选项修改此行为:

\n\n
procedure TTextControl.DoChanged;\nvar\n  TextStr: string;\nbegin\n  if Assigned(FITextSettings) then\n    FITextSettings.TextSettings.BeginUpdate;\n  try\n    if Assigned(FITextSettings) then\n      FITextSettings.TextSettings.Assign(ResultingTextSettings);\n    TextStr := DelAmp(Text);  // **!  Here deleting ampersands unconditionally\n\n    if Assigned(FTextObject) then\n    begin\n      UpdateTextObject(FTextObject, TextStr);\n\n   // ... etc - method continues\n
Run Code Online (Sandbox Code Playgroud)\n\n

一种解决方法是使用 unicode 全角 & 符号:

\n\n
 ComboBox1.Items.Add(\'Zebra \xef\xbc\x86 Zulu\');\n
Run Code Online (Sandbox Code Playgroud)\n\n

出于多种原因,显然不具有吸引力。

\n\n

从上面的代码来看,这自然会影响所有FMX TTextControls- 例如,即使是 a TLabel,在分配时也不会显示&符号:

\n\n
 Label1.Text := \'Zebra & Zulu\';\n
Run Code Online (Sandbox Code Playgroud)\n\n

即使在 VCL 应用程序中,出于兴趣,这样:

\n\n
  Label1.Caption := \'Zebra & Zulu\';\n
Run Code Online (Sandbox Code Playgroud)\n\n

将呈现为

\n\n
\n

斑马_祖鲁语

\n
\n\n

尽管 VCLTComboBox 正确地使用单个 & 符号呈现项目...

\n\n
\n\n

这是一个开放的质量控制,尽管看起来并不急于解决:

\n\n

http://qc.embarcadero.com/wc/qcmain.aspx?d=122564

\n