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

时间:2015-05-14 14:32:35

标签: delphi combobox firemonkey

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

创建Firemonkey项目并添加comboxbox或comboedit并设置 ComboBox1.Items.Add(' Zebra& Zulu') ComboEdit1.Items时。添加(' Zebra& Zulu')它显示" Zebra Zulu"下拉列表时(没有&符号显示)。但是,当您使用comboedit选择它时,文本字段部分显示" Zebra&祖鲁&#34 ;.太奇怪了。

现在有一种解决方法(但有点),但对我来说这是值得怀疑的。添加第二个&符号,下拉列表显示&符号。但是,添加第二个&符号会显示在comboedit文本字段部分上。坏。

我的问题是,您是否可以强制使用这些组合控件下拉列表来显示&符号?为什么首先缺少&符号?

1 个答案:

答案 0 :(得分:1)

这似乎是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');

由于多种原因,显然没有吸引力。

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

 Label1.Text := 'Zebra & Zulu';

即使在VCL应用程序中,为了感兴趣,这个:

  Label1.Caption := 'Zebra & Zulu';

将呈现为

  

Zebra _Zulu

虽然VCL TComboBox 正确呈现带有单个&符号的项目...

这是一个开放的质量控制,虽然不会出现任何急于解决的问题:

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