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

Why is the ampersand missing in Firemonkey combo?

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

当您创建一个 Firemonkey 项目并添加一个组合框或组合编辑器并设置 ComboBox1.Items.Add('Zebra & Zulu')ComboEdit1.Items.Add('Zebra & Zulu') 当您下拉列表时,它显示 "Zebra Zulu"(没有符号显示)。但是,当您 select 它使用组合编辑时,文本字段部分显示 "Zebra & Zulu"。真奇怪。

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

我的问题是你能强制这些组合控件下拉列表显示符号吗?为什么 & 符号一开始就不见了?

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

procedure TTextControl.DoChanged;
var
  TextStr: string;
begin
  if Assigned(FITextSettings) then
    FITextSettings.TextSettings.BeginUpdate;
  try
    if Assigned(FITextSettings) then
      FITextSettings.TextSettings.Assign(ResultingTextSettings);
    TextStr := DelAmp(Text);  // **!  Here deleting ampersands unconditionally

    if Assigned(FTextObject) then
    begin
      UpdateTextObject(FTextObject, TextStr);

   // ... etc - method continues

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

 ComboBox1.Items.Add('Zebra & Zulu');

显然由于多种原因不吸引人。

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

 Label1.Text := 'Zebra & Zulu';

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

  Label1.Caption := 'Zebra & Zulu';

将呈现为

Zebra _Zulu

尽管 VCL TComboBox 正确地呈现带有单个 & 符号的项目...


这是一个开放的 QC,尽管它并不急于被解决:

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